I have written an C++/Cli wrapper for a native C++ dll, but when I call some method from C# I get an System.AccessViolationException error in my C++/Cli Wrapper dll! It's necessary to marshal the unmanaged types or something else?!
When I call at example SomeMethod from C# I get the error in C++/Cli dll!Code:// 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(); delete m_object; m_object = 0; } 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(); }
(I included the C++/cli dll with add reference in C sharp project and create the Wrapper object)
Thank you for your help!
greets


Reply With Quote

Bookmarks