我有一个仅具有一个导出功能的DLL:
#ifdef __cplusplus
extern "C"
{
__declspec(dllexport) IRouter* CreateRouter();
}
#endif
IRouter的界面如下:
class IRouter
{
public:
virtual bool __stdcall DoSomething(LPCWSTR szCommand) = 0;
// Call Release() from DLL client to free any memory associated with this object
virtual bool __stdcall Release() = 0;
};
我有一个具体的类,其接口如下:
class CMyRouter : public IRouter
{
public:
bool __stdcall DoSomething(LPCWSTR szCommand);
bool __stdcall Release();
}
如您所料,DLL中包含MyRouter类的实现。
我的单个导出功能的代码如下:
#ifdef __cplusplus
extern "C"
{
__declspec(dllexport) IRouter* CreateRouter()
{
return new CMyRouter;
}
}
#endif // __cplusplus
我的问题是:如何从C#客户端访问IRouter派生的对象?
最佳答案
您可以在C ++ / CLI中执行此操作(使用聚合,而不是继承)。例如,在C ++ / CLI中创建一个托管类,该托管类对应并保存指向C ++抽象类IRouter
的指针,并提供一些转发方法,例如`DoSomething(string)
。然后,您可以在C#中实现其余的托管逻辑。
使用P / Invoke或COM使用该类也是可能的,但与您当前问题的表达形式不完全一致的。