aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author1992414357@qq.com <1992414357@qq.com>2025-06-18 05:30:18 +0800
committer1992414357@qq.com <1992414357@qq.com>2025-06-18 05:30:18 +0800
commit77ee488974095a99fde66226ceca792034ca3b2a (patch)
treeb0ab1eee59cdad156818011fd63c96bb83556c76
parent3fb27c433ba9d19bb9ba56f87d44a816a500da6e (diff)
Create Csharp bindings
-rw-r--r--.idea/NoGamepads.iml8
-rw-r--r--Project_Export.toml11
-rw-r--r--core/bindings/lang/csharp/.gitignore2
-rw-r--r--core/bindings/lang/csharp/NoGamepads_CharpBindings/.gitignore11
-rw-r--r--core/bindings/lang/csharp/NoGamepads_CharpBindings/.run/Example.run.xml20
-rw-r--r--core/bindings/lang/csharp/NoGamepads_CharpBindings/.run/Generate Csharp Bindings.run.xml20
-rw-r--r--core/bindings/lang/csharp/NoGamepads_CharpBindings/NoGamepads_Bindings/NoGamepads_Bindings.csproj20
-rw-r--r--core/bindings/lang/csharp/NoGamepads_CharpBindings/NoGamepads_Bindings/Program.cs37
-rw-r--r--core/bindings/lang/csharp/NoGamepads_CharpBindings/NoGamepads_CharpBindings.sln6
-rw-r--r--core/bindings/lang/csharp/NoGamepads_CharpBindings/NoGamepads_Core/Data/Player.cs19
-rw-r--r--core/bindings/lang/csharp/NoGamepads_CharpBindings/NoGamepads_Core/Native/.gitignore2
-rw-r--r--core/bindings/lang/csharp/NoGamepads_CharpBindings/NoGamepads_Core/NoGamepads_Core.csproj6
-rw-r--r--core/bindings/lang/csharp/NoGamepads_CharpBindings/NoGamepads_Core/PtrStringConverter.cs23
-rw-r--r--core/bindings/lang/csharp/NoGamepads_CharpBindings/NoGamepads_Example/Program.cs6
14 files changed, 183 insertions, 8 deletions
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 @@
<excludeFolder url="file://$MODULE_DIR$/core/bindings/lang/clang/binding_example/include" />
<excludeFolder url="file://$MODULE_DIR$/core/bindings/lang/clang/binding_example/libs" />
<excludeFolder url="file://$MODULE_DIR$/export/dev" />
+ <excludeFolder url="file://$MODULE_DIR$/core/bindings/lang/csharp/NoGamepads_CharpBindings/NoGamepads_Bindings/Native" />
+ <excludeFolder url="file://$MODULE_DIR$/core/bindings/lang/csharp/NoGamepads_CharpBindings/NoGamepads_Bindings/bin" />
+ <excludeFolder url="file://$MODULE_DIR$/core/bindings/lang/csharp/NoGamepads_CharpBindings/NoGamepads_Bindings/obj" />
+ <excludeFolder url="file://$MODULE_DIR$/core/bindings/lang/csharp/NoGamepads_CharpBindings/NoGamepads_Core/Generated" />
+ <excludeFolder url="file://$MODULE_DIR$/core/bindings/lang/csharp/NoGamepads_CharpBindings/NoGamepads_Core/bin" />
+ <excludeFolder url="file://$MODULE_DIR$/core/bindings/lang/csharp/NoGamepads_CharpBindings/NoGamepads_Core/obj" />
+ <excludeFolder url="file://$MODULE_DIR$/core/bindings/lang/csharp/NoGamepads_CharpBindings/NoGamepads_Example/bin" />
+ <excludeFolder url="file://$MODULE_DIR$/core/bindings/lang/csharp/NoGamepads_CharpBindings/NoGamepads_Example/obj" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
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 @@
+<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