From 77ee488974095a99fde66226ceca792034ca3b2a Mon Sep 17 00:00:00 2001 From: "1992414357@qq.com" <1992414357@qq.com> Date: Wed, 18 Jun 2025 05:30:18 +0800 Subject: Create Csharp bindings --- .idea/NoGamepads.iml | 8 +++++ Project_Export.toml | 11 +++++-- core/bindings/lang/csharp/.gitignore | 2 ++ .../csharp/NoGamepads_CharpBindings/.gitignore | 11 +++++++ .../NoGamepads_CharpBindings/.run/Example.run.xml | 20 ++++++++++++ .../.run/Generate Csharp Bindings.run.xml | 20 ++++++++++++ .../NoGamepads_Bindings/NoGamepads_Bindings.csproj | 20 ++++++++++++ .../NoGamepads_Bindings/Program.cs | 37 ++++++++++++++++++++++ .../NoGamepads_CharpBindings.sln | 6 ++++ .../NoGamepads_Core/Data/Player.cs | 19 +++++++++++ .../NoGamepads_Core/Native/.gitignore | 2 -- .../NoGamepads_Core/NoGamepads_Core.csproj | 6 ++-- .../NoGamepads_Core/PtrStringConverter.cs | 23 ++++++++++++++ .../NoGamepads_Example/Program.cs | 6 +++- 14 files changed, 183 insertions(+), 8 deletions(-) create mode 100644 core/bindings/lang/csharp/.gitignore create mode 100644 core/bindings/lang/csharp/NoGamepads_CharpBindings/.gitignore create mode 100644 core/bindings/lang/csharp/NoGamepads_CharpBindings/.run/Example.run.xml create mode 100644 core/bindings/lang/csharp/NoGamepads_CharpBindings/.run/Generate Csharp Bindings.run.xml create mode 100644 core/bindings/lang/csharp/NoGamepads_CharpBindings/NoGamepads_Bindings/NoGamepads_Bindings.csproj create mode 100644 core/bindings/lang/csharp/NoGamepads_CharpBindings/NoGamepads_Bindings/Program.cs create mode 100644 core/bindings/lang/csharp/NoGamepads_CharpBindings/NoGamepads_Core/Data/Player.cs delete mode 100644 core/bindings/lang/csharp/NoGamepads_CharpBindings/NoGamepads_Core/Native/.gitignore create mode 100644 core/bindings/lang/csharp/NoGamepads_CharpBindings/NoGamepads_Core/PtrStringConverter.cs diff --git a/.idea/NoGamepads.iml b/.idea/NoGamepads.iml index e154ed3..07b0ecc 100644 --- a/.idea/NoGamepads.iml +++ b/.idea/NoGamepads.iml @@ -27,6 +27,14 @@ + + + + + + + + diff --git a/Project_Export.toml b/Project_Export.toml index c8c9e82..ba2c27d 100644 --- a/Project_Export.toml +++ b/Project_Export.toml @@ -38,17 +38,22 @@ dlls = { raw = "./", target = "./lib", files = [ [release.deploy_root] # Headers -headers = { raw = "./core/bindings/lang/clang/headers/", target = "./core/bindings/lang/clang/binding_example/include/", files = [ +c_binding_example_headers = { raw = "./core/bindings/lang/clang/headers/", target = "./core/bindings/lang/clang/binding_example/include/", files = [ + "nogamepads_data.h", +] } + +csharp_binding_headers = { raw = "./core/bindings/lang/clang/headers/", target = "./core/bindings/lang/csharp/NoGamepads_CharpBindings/NoGamepads_Bindings/Native/", files = [ "nogamepads_data.h", ] } [release.deploy_deps] -c_binding_example_win = { raw = "./", target = "./core/bindings/lang/clang/binding_example/libs/", files = [ +# Deps +c_binding_example_deps_win = { raw = "./", target = "./core/bindings/lang/clang/binding_example/libs/", files = [ "nogamepads_c.dll", "nogamepads_c.dll.lib" ] } -csharp_binding_win = { raw = "./", target = "./core/bindings/lang/csharp/NoGamepads_CharpBindings/NoGamepads_Core/Native/", files = [ +csharp_binding_deps_win = { raw = "./", target = "./core/bindings/lang/csharp/NoGamepads_CharpBindings/NoGamepads_Bindings/Native/", files = [ "nogamepads_c.dll", ] } \ No newline at end of file diff --git a/core/bindings/lang/csharp/.gitignore b/core/bindings/lang/csharp/.gitignore new file mode 100644 index 0000000..1e6dd16 --- /dev/null +++ b/core/bindings/lang/csharp/.gitignore @@ -0,0 +1,2 @@ +./Working/ +./Working/* \ No newline at end of file diff --git a/core/bindings/lang/csharp/NoGamepads_CharpBindings/.gitignore b/core/bindings/lang/csharp/NoGamepads_CharpBindings/.gitignore new file mode 100644 index 0000000..a7e5508 --- /dev/null +++ b/core/bindings/lang/csharp/NoGamepads_CharpBindings/.gitignore @@ -0,0 +1,11 @@ +./NoGamepads_Bindings/bin/ +./NoGamepads_Bindings/obj/ + +./NoGamepads_Core/bin/ +./NoGamepads_Core/obj/ + +./NoGamepads_Example/bin/ +./NoGamepads_Example/obj/ + +./NoGamepads_Bindings/Native/ +./NoGamepads_Core/Generated/ \ No newline at end of file diff --git a/core/bindings/lang/csharp/NoGamepads_CharpBindings/.run/Example.run.xml b/core/bindings/lang/csharp/NoGamepads_CharpBindings/.run/Example.run.xml new file mode 100644 index 0000000..91f4cc3 --- /dev/null +++ b/core/bindings/lang/csharp/NoGamepads_CharpBindings/.run/Example.run.xml @@ -0,0 +1,20 @@ + + + + \ No newline at end of file diff --git a/core/bindings/lang/csharp/NoGamepads_CharpBindings/.run/Generate Csharp Bindings.run.xml b/core/bindings/lang/csharp/NoGamepads_CharpBindings/.run/Generate Csharp Bindings.run.xml new file mode 100644 index 0000000..e70ca09 --- /dev/null +++ b/core/bindings/lang/csharp/NoGamepads_CharpBindings/.run/Generate Csharp Bindings.run.xml @@ -0,0 +1,20 @@ + + + + \ No newline at end of file diff --git a/core/bindings/lang/csharp/NoGamepads_CharpBindings/NoGamepads_Bindings/NoGamepads_Bindings.csproj b/core/bindings/lang/csharp/NoGamepads_CharpBindings/NoGamepads_Bindings/NoGamepads_Bindings.csproj new file mode 100644 index 0000000..b12992a --- /dev/null +++ b/core/bindings/lang/csharp/NoGamepads_CharpBindings/NoGamepads_Bindings/NoGamepads_Bindings.csproj @@ -0,0 +1,20 @@ + + + + Exe + net6.0 + enable + enable + NoGamepads_Bindings + true + + + + + PreserveNewest + + + + + + diff --git a/core/bindings/lang/csharp/NoGamepads_CharpBindings/NoGamepads_Bindings/Program.cs b/core/bindings/lang/csharp/NoGamepads_CharpBindings/NoGamepads_Bindings/Program.cs new file mode 100644 index 0000000..ebb5f76 --- /dev/null +++ b/core/bindings/lang/csharp/NoGamepads_CharpBindings/NoGamepads_Bindings/Program.cs @@ -0,0 +1,37 @@ +using CppSharp; +using CppSharp.AST; +using CppSharp.Generators; +using CppSharp.Generators.AST; +using RecordArgABI = CppSharp.Parser.AST.RecordArgABI; + +namespace NoGamepads_Bindings; + +internal static class Program +{ + public static void Main(string[] args) + { + ConsoleDriver.Run(new NoGamepadsLibrary()); + } +} + +public class NoGamepadsLibrary : ILibrary +{ + public void Preprocess(Driver driver, ASTContext ctx) { } + + public void Postprocess(Driver driver, ASTContext ctx) { } + + public void SetupPasses(Driver driver) { } + + public void Setup(Driver driver) + { + var options = driver.Options; + options.GeneratorKind = GeneratorKind.CSharp; + options.OutputDir = "NoGamepads_Core/Generated"; + options.GenerateClassTemplates = false; + + var module = options.AddModule("NoGamepads.Native"); + module.OutputNamespace = "NoGamepads_Sharp"; + module.IncludeDirs.Add("NoGamepads_Bindings/Native"); + module.Headers.Add("nogamepads_data.h"); + } +} \ No newline at end of file diff --git a/core/bindings/lang/csharp/NoGamepads_CharpBindings/NoGamepads_CharpBindings.sln b/core/bindings/lang/csharp/NoGamepads_CharpBindings/NoGamepads_CharpBindings.sln index c9a183e..0cb984f 100644 --- a/core/bindings/lang/csharp/NoGamepads_CharpBindings/NoGamepads_CharpBindings.sln +++ b/core/bindings/lang/csharp/NoGamepads_CharpBindings/NoGamepads_CharpBindings.sln @@ -4,6 +4,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NoGamepads_Core", "NoGamepa EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NoGamepads_Example", "NoGamepads_Example\NoGamepads_Example.csproj", "{D576309A-DCDF-4A71-B3F0-C22EE34B9F2B}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NoGamepads_Bindings", "NoGamepads_Bindings\NoGamepads_Bindings.csproj", "{5A5FFBF1-C1CC-449B-8225-4CA6E4EBD39E}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -18,5 +20,9 @@ Global {D576309A-DCDF-4A71-B3F0-C22EE34B9F2B}.Debug|Any CPU.Build.0 = Debug|Any CPU {D576309A-DCDF-4A71-B3F0-C22EE34B9F2B}.Release|Any CPU.ActiveCfg = Release|Any CPU {D576309A-DCDF-4A71-B3F0-C22EE34B9F2B}.Release|Any CPU.Build.0 = Release|Any CPU + {5A5FFBF1-C1CC-449B-8225-4CA6E4EBD39E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5A5FFBF1-C1CC-449B-8225-4CA6E4EBD39E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5A5FFBF1-C1CC-449B-8225-4CA6E4EBD39E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5A5FFBF1-C1CC-449B-8225-4CA6E4EBD39E}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection EndGlobal diff --git a/core/bindings/lang/csharp/NoGamepads_CharpBindings/NoGamepads_Core/Data/Player.cs b/core/bindings/lang/csharp/NoGamepads_CharpBindings/NoGamepads_Core/Data/Player.cs new file mode 100644 index 0000000..a3c3ddd --- /dev/null +++ b/core/bindings/lang/csharp/NoGamepads_CharpBindings/NoGamepads_Core/Data/Player.cs @@ -0,0 +1,19 @@ +using NoGamepads_Sharp; + +namespace NoGamepads_Core.Data; + +public class Player +{ + private FfiPlayer _ffi = nogamepads_data.PlayerRegister("Fuck", "AAAAA"); + + public String name + { + get + { + unsafe + { + return PtrStringConverter.ToString(_ffi.Account.PlayerHash); + } + } + } +} \ No newline at end of file diff --git a/core/bindings/lang/csharp/NoGamepads_CharpBindings/NoGamepads_Core/Native/.gitignore b/core/bindings/lang/csharp/NoGamepads_CharpBindings/NoGamepads_Core/Native/.gitignore deleted file mode 100644 index 73edf03..0000000 --- a/core/bindings/lang/csharp/NoGamepads_CharpBindings/NoGamepads_Core/Native/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -!.gitignore -* \ No newline at end of file diff --git a/core/bindings/lang/csharp/NoGamepads_CharpBindings/NoGamepads_Core/NoGamepads_Core.csproj b/core/bindings/lang/csharp/NoGamepads_CharpBindings/NoGamepads_Core/NoGamepads_Core.csproj index 03fb85e..cdf58f8 100644 --- a/core/bindings/lang/csharp/NoGamepads_CharpBindings/NoGamepads_Core/NoGamepads_Core.csproj +++ b/core/bindings/lang/csharp/NoGamepads_CharpBindings/NoGamepads_Core/NoGamepads_Core.csproj @@ -4,15 +4,17 @@ net6.0 enable enable + true PreserveNewest - + + - + \ No newline at end of file diff --git a/core/bindings/lang/csharp/NoGamepads_CharpBindings/NoGamepads_Core/PtrStringConverter.cs b/core/bindings/lang/csharp/NoGamepads_CharpBindings/NoGamepads_Core/PtrStringConverter.cs new file mode 100644 index 0000000..0760162 --- /dev/null +++ b/core/bindings/lang/csharp/NoGamepads_CharpBindings/NoGamepads_Core/PtrStringConverter.cs @@ -0,0 +1,23 @@ +using System.Runtime.InteropServices; +using System.Text; + +namespace NoGamepads_Core; + +public static class PtrStringConverter +{ + public static unsafe string ToString(sbyte* ptr) + { + string? str = Marshal.PtrToStringUTF8((IntPtr)ptr); + return str ?? ""; + } + + public static unsafe sbyte* ToPtr(string str) + { + byte[] bytes = Encoding.ASCII.GetBytes(str + '\0'); + IntPtr ptr = Marshal.AllocHGlobal(bytes.Length); + Marshal.Copy(bytes, 0, ptr, bytes.Length); + sbyte* sbytePtr = (sbyte*)ptr.ToPointer(); + Marshal.FreeHGlobal(ptr); + return sbytePtr; + } +} \ No newline at end of file diff --git a/core/bindings/lang/csharp/NoGamepads_CharpBindings/NoGamepads_Example/Program.cs b/core/bindings/lang/csharp/NoGamepads_CharpBindings/NoGamepads_Example/Program.cs index e5dff12..6c450f9 100644 --- a/core/bindings/lang/csharp/NoGamepads_CharpBindings/NoGamepads_Example/Program.cs +++ b/core/bindings/lang/csharp/NoGamepads_CharpBindings/NoGamepads_Example/Program.cs @@ -1,3 +1,7 @@ // See https://aka.ms/new-console-template for more information -Console.WriteLine("Hello, World!"); \ No newline at end of file +using NoGamepads_Core.Data; + +Player player = new Player(); + +Console.WriteLine(player.name); \ No newline at end of file -- cgit