用于本机C ++ dll的C ++ / CLI包装器
||
我已经为本地C ++ dll编写了C ++ / Cli包装器,但是当我从C#调用某些方法时,我的C ++ / Cli包装器dll中出现System.AccessViolationException错误!是否需要封送非托管类型或其他内容?!
// Wrapper.h
typedef UnmanagedClass* (*Instance)(void);
private:
UnmanagedClass *m_object; // unmanaged object
// Wrapper.cpp
Wrapper:Wrapper()
{
HINSTANCE unmanagedLib;
unmangedLib = LoadLibrary(SystemStringToLPCSTR(dllPath+dllName));
// load instance
Instance _createInstance = (Instance)GetProcAddress(unmangedLib, \"GetInstance\");
m_object = (_createInstance)();
}
Wrapper::~Wrapper()
{
m_object->~UnmanagedClass();
}
Uint32 Wrapper::SomeMethod(Uint8 *bytRecvBuffer, int &iRecvLen)
{
return m_object->SomeMethod(bytRecvBuffer, iRecvLen);
}
// Unmanaged Class
class UnmanagedClass
{
public:
/**
* Default constructor.
*/
UnmanagedClass(void);
/**
* Default Destructor
*/
~UnmanagedClass(void);
virtual Uint32 Wrapper::SomeMethod(Uint8 *bytRecvBuffer, int &iRecvLen);
};
// export the UnmanagedClass object
extern \"C\" _declspec(dllexport) UnmanagedClass* GetInstance();
// UnamangedClass.cpp
UnamangedClass::~UnamangedClass(void)
{
if (UnamangedClassDLL != NULL)
FreeLibrary(UnamangedClassDLL);
UnamangedClassDLL = NULL;
}
extern \"C\" _declspec(dllexport) UnmanagedClass* GetInstance()
{
return new UnmanagedClass();
}
当我从C#调用示例SomeMethod时,出现C ++ / Cli dll错误!
(我在C Sharp项目中包括了带有添加引用的C ++ / cli dll并创建了包装对象)
谢谢您的帮助!
打招呼
没有找到相关结果
已邀请:
2 个回复
缝皋
的对象的析构函数是不合适的。尝试改变
至
(
是必需的,因为与本机C ++类型的析构函数只能被调用一次不同,托管类型的
实现可以被重复调用,并且这样做必须具有定义的行为。) 或者,更好的是,除了公开
函数之外,还公开
函数并调用该函数,而不是使用
,以便使用代码无需依赖
的实现细节(即,它使用
分配其实例)。 )。
孝箱捆讨