从 c# 调用 c++ DLL 的 class 成员

Call class member of c++ DLL from c#

当提供的函数不是 classes 的成员时,我已经知道如何从 C# 调用 C++ DLL 的函数。但是我如何在下面的代码示例中调用像 foo 这样的 class 成员?

class _declspec(dllexport) MyClass{
    public:
        void foo();
};

这样做是行不通的,因为 c#-Compiler 不知道要调用哪个 class。

[DllImport("MyDLL", CallingConvention = CallingConvention.Cdecl)]
    private static extern void foo();

从 C#(和大多数其他语言)直接调用 C++ 对象方法的唯一方法是从中创建一个成熟的 COM 对象。

一种更简单的间接级别方法:开发 API 反映对象操作的纯静态方法。然后您可以轻松地从 .NET 调用它。

C++:

MyClass* WINAPI CreateMyClass() { return new MyClass(); }
void WINAPI CallFoo(MyClass* o) { o->foo(); }

C#:

[DllImport("MyDLL")]
private static IntPtr CreateMyClass();

[DllImport("MyDLL")]
private static void CallFoo(IntPtr o);