当提供的函数不是类的成员时,我已经知道如何从C#调用C ++ DLL的函数。但是我如何在下面的代码示例中调用像foo这样的类成员?
class _declspec(dllexport) MyClass{
public:
void foo();
};
做这样的事情是行不通的,因为c#-Compiler不知道要调用哪个类。
[DllImport("MyDLL", CallingConvention = CallingConvention.Cdecl)]
private static extern void foo();
答案 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);