【发布时间】:2008-09-18 15:49:31
【问题描述】:
出于部署原因,我尝试使用 IJW 在 C++ 中包装 C# 程序集,而不是使用 COM 可调用包装器。
我在其他项目上也做过,但在这个项目上,我得到了一个 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 - 致命的执行引擎错误 (79F97075) (80131506)
很遗憾,Microsoft 没有关于该错误的信息。
【问题讨论】:
-
您是否进行了测试来验证程序集是否从同一目录加载?
-
当我手动将托管 DLL 复制到 exe 的目录中时,它可以在没有这些额外代码的情况下工作。
标签: c# managed-c++