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

时间:2015-06-08 15:49:34

标签: c# c++ dll marshalling

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

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

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

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

1 个答案:

答案 0 :(得分:2)

从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);