https://github.com/egorbo/cpppinvokegenerator
A simple pinvoke generator based on CppAst to generate C# for C++
https://github.com/egorbo/cpppinvokegenerator
Last synced: about 1 year ago
JSON representation
A simple pinvoke generator based on CppAst to generate C# for C++
- Host: GitHub
- URL: https://github.com/egorbo/cpppinvokegenerator
- Owner: EgorBo
- License: bsd-2-clause
- Created: 2019-05-29T14:19:18.000Z (about 7 years ago)
- Default Branch: master
- Last Pushed: 2019-07-19T23:19:26.000Z (almost 7 years ago)
- Last Synced: 2025-04-16T09:22:55.441Z (about 1 year ago)
- Language: C#
- Size: 323 KB
- Stars: 33
- Watchers: 3
- Forks: 7
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# CppPinvokeGenerator
A simple pinvoke generator based on [xoofx/CppAst](https://github.com/xoofx/CppAst) to generate C# for C/C++
Let's say we have a C++ class:
```c++
class Calculator {
public:
int add(int x, int y);
}
```
Since it's a class and `add` is an instance method, we need to make it DllImport-friendly:
```c++
EXPORTS(Calculator*) Calculator_Calculator() { return new Calculator(); }
EXPORTS(int) Calculator_add(Calculator* target, int x, int y);
```
Now we can easily bind it to C#:
```csharp
public partial class Calculator : SafeHandle
{
public IntPtr Handle { get; private set; }
// API:
public Calculator() => this.Handle = Calculator_Calculator();
public int Add(int x, int y) => Calculator_add(Handle, x, y);
// DllImports
[DllImport("mylib")] private static extern int Calculator_add(IntPtr handle, int x, int y);
[DllImport("mylib")] private static extern IntPtr Calculator_Calculator();
}
```
So the generator is able to generate C# classes and the C glue.
As an example - see [samples/SimdJson](https://github.com/EgorBo/CppPinvokeGenerator/tree/master/samples/SimdJson).
# Nuget
```
dotnet add package CppPinvokeGenerator
```