CppPinvokeGenerator

A simple pinvoke generator based on CppAst to generate C# for C++

BSD-2-CLAUSE License

Stars
29
Committers
1

CppPinvokeGenerator

A simple pinvoke generator based on xoofx/CppAst to generate C# for C/C++

Let's say we have a C++ class:

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:

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#:

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.

Nuget

dotnet add package CppPinvokeGenerator