배포상의 이유로 IXW를 사용하여 COM 호출 가능 래퍼 대신 C++에서 C# 어셈블리를 래핑하려고합니다.C++ (win32 응용 프로그램)에서 C# 클래스를 사용하는 경우 EEFileLoadException
다른 프로젝트에서도이 작업을 수행했지만이 작업에서는 EEFileLoadException이 발생합니다. 어떤 도움을 주시면 감사하겠습니다!
관리되는 C++ 래퍼 코드 (이것은 DLL에) :
extern "C" __declspec(dllexport) IMyObject* CreateMyObject(void)
{
//this class references c# in the constructor
return new CMyWrapper();
}
extern "C" __declspec(dllexport) void DeleteMyObject(IMyObject* pConfigFile)
{
delete pConfigFile;
}
extern "C" __declspec(dllexport) void TestFunction(void)
{
::MessageBox(NULL, _T("My Message Box"), _T("Test"), MB_OK);
}
테스트 코드 (이있는 EXE) :
그것은 가치가 무엇인지에 대한typedef void* (*CreateObjectPtr)();
typedef void (*TestFunctionPtr)();
int _tmain testwrapper(int argc, TCHAR* argv[], TCHAR* envp[])
{
HMODULE hModule = ::LoadLibrary(_T("MyWrapper"));
_ASSERT(hModule != NULL);
PVOID pFunc1 = ::GetProcAddress(hModule, "TestFunction");
_ASSERT(pFunc1 != NULL);
TestFunctionPtr pTest = (TestFunctionPtr)pFunc1;
PVOID pFunc2 = ::GetProcAddress(hModule, "CreateMyObject");
_ASSERT(pFunc2 != NULL);
CreateObjectPtr pCreateObjectFunc = (CreateObjectPtr)pFunc2;
(*pTest)(); //this successfully pops up a message box
(*pCreateObjectFunc)(); //this tosses an EEFileLoadException
return 0;
}
는, 이벤트 로그는 다음을보고 : .NET 런타임 버전 2.0.50727.143 - 치명적인 실행 엔진 오류 (79137050)
불행히도 Microsoft에는 정보가 없습니다. 그 오류에 대한 설명.
어셈블리가 동일한 디렉토리에서로드되는지 확인하는 테스트가 있습니까? –
수동으로 관리되는 DLL을 exe의 디렉터리에 복사하면이 추가 코드없이 작동합니다. –