从 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);
当提供的函数不是 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);