diff options
| author | 1992414357@qq.com <1992414357@qq.com> | 2025-06-18 05:30:18 +0800 |
|---|---|---|
| committer | 1992414357@qq.com <1992414357@qq.com> | 2025-06-18 05:30:18 +0800 |
| commit | 77ee488974095a99fde66226ceca792034ca3b2a (patch) | |
| tree | b0ab1eee59cdad156818011fd63c96bb83556c76 /core/bindings | |
| parent | 3fb27c433ba9d19bb9ba56f87d44a816a500da6e (diff) | |
Create Csharp bindings
Diffstat (limited to 'core/bindings')
12 files changed, 167 insertions, 5 deletions
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 @@ +<component name="ProjectRunConfigurationManager"> + <configuration default="false" name="Example" type="DotNetProject" factoryName=".NET Project" folderName="Run"> + <option name="EXE_PATH" value="$PROJECT_DIR$/NoGamepads_Example/bin/Debug/net6.0/NoGamepads_Example.exe" /> + <option name="PROGRAM_PARAMETERS" value="" /> + <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/../Working/" /> + <option name="PASS_PARENT_ENVS" value="1" /> + <option name="USE_EXTERNAL_CONSOLE" value="0" /> + <option name="USE_MONO" value="0" /> + <option name="RUNTIME_ARGUMENTS" value="" /> + <option name="PROJECT_PATH" value="$PROJECT_DIR$/NoGamepads_Example/NoGamepads_Example.csproj" /> + <option name="PROJECT_EXE_PATH_TRACKING" value="1" /> + <option name="PROJECT_ARGUMENTS_TRACKING" value="1" /> + <option name="PROJECT_WORKING_DIRECTORY_TRACKING" value="0" /> + <option name="PROJECT_KIND" value="DotNetCore" /> + <option name="PROJECT_TFM" value="net6.0" /> + <method v="2"> + <option name="Build" /> + </method> + </configuration> +</component>
\ 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 @@ +<component name="ProjectRunConfigurationManager"> + <configuration default="false" name="Generate Csharp Bindings" type="DotNetProject" factoryName=".NET Project" folderName="Generate"> + <option name="EXE_PATH" value="$PROJECT_DIR$/NoGamepads_Bindings/bin/Debug/net6.0/NoGamepads_Bindings.exe" /> + <option name="PROGRAM_PARAMETERS" value="" /> + <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/" /> + <option name="PASS_PARENT_ENVS" value="1" /> + <option name="USE_EXTERNAL_CONSOLE" value="0" /> + <option name="USE_MONO" value="0" /> + <option name="RUNTIME_ARGUMENTS" value="" /> + <option name="PROJECT_PATH" value="$PROJECT_DIR$/NoGamepads_Bindings/NoGamepads_Bindings.csproj" /> + <option name="PROJECT_EXE_PATH_TRACKING" value="1" /> + <option name="PROJECT_ARGUMENTS_TRACKING" value="1" /> + <option name="PROJECT_WORKING_DIRECTORY_TRACKING" value="0" /> + <option name="PROJECT_KIND" value="DotNetCore" /> + <option name="PROJECT_TFM" value="net6.0" /> + <method v="2"> + <option name="Build" /> + </method> + </configuration> +</component>
\ 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 @@ +<Project Sdk="Microsoft.NET.Sdk"> + + <PropertyGroup> + <OutputType>Exe</OutputType> + <TargetFramework>net6.0</TargetFramework> + <ImplicitUsings>enable</ImplicitUsings> + <Nullable>enable</Nullable> + <RootNamespace>NoGamepads_Bindings</RootNamespace> + <AllowUnsafeBlocks>true</AllowUnsafeBlocks> + </PropertyGroup> + + <ItemGroup> + <Content Include="Native\**"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> + + <PackageReference Include="CppSharp" Version="1.1.5.3168" /> + </ItemGroup> + +</Project> 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 @@ <TargetFramework>net6.0</TargetFramework> <ImplicitUsings>enable</ImplicitUsings> <Nullable>enable</Nullable> + <AllowUnsafeBlocks>true</AllowUnsafeBlocks> </PropertyGroup> <ItemGroup> <Content Include="Native\**"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> - <Folder Include="Data\" /> <Folder Include="Runtime\" /> <Folder Include="Services\" /> + + <ProjectReference Include="..\NoGamepads_Bindings\NoGamepads_Bindings.csproj" /> </ItemGroup> -</Project> +</Project>
\ 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 |
