Ale*_*x F 21
C#无法创建从本机Dll导出的类实例.您有两种选择:
创建C++/CLI包装器.这是.NET类库,可以作为对任何其他.NET项目的引用添加.在内部,C++/CLI类使用非托管类,通过标准C++规则链接到本机Dll.对于.NET客户端,此C++/CLI类看起来像.NET类.
编写C++类的C包装器,.NET客户端可以使用PInvoke.例如,过度简化的C++类:
class MyClass()
{
public:
MyClass(int n){data=n;}
~MyClass(){}
int GetData(){return data;}
private:
int data;
};
此类的C API包装器:
void* CreateInstance()
{
MyClass* p = new MyClass();
return p;
}
void ReleaseInstance(void* pInstance)
{
MyClass* p = (MyClass*)pInstance;
delete p;
}
int GetData(void* pInstance)
{
MyClass* p = (MyClass*)pInstance;
return p->GetData();
}
// Write wrapper function for every MyClass public method.
// First parameter of every wrapper function should be class instance.
CreateInstance,ReleaseInstance和GetData可以使用PInvoke在C#客户端声明,并直接调用.void*参数应在PInvoke声明中声明为IntPtr.