Por razones de implementación, estoy tratando de usar IJW para envolver un ensamblado C# en C++ en lugar de utilizar un Contenedor COM invocable.EEFileLoadException al usar clases C# en C++ (aplicación win32)
Lo he hecho en otros proyectos, pero en este caso, recibo una EEFileLoadException. ¡Cualquier ayuda sería apreciada!
Gestionado código C++ envoltorio (esto es en un 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);
}
Código de prueba (este es un archivo 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;
}
Por lo que vale la pena, el registro de sucesos informa lo siguiente : .NET Runtime versión 2.0.50727.143 - Fatal Execution Engine Error (79F97075) (80131506)
Desafortunadamente, Microsoft no tiene información rmación sobre ese error.
¿Ha realizado pruebas para verificar que el ensamblaje se carga desde el mismo directorio? –
Cuando copié manualmente la DLL administrada en el directorio de exe, funcionó sin este código adicional. –