I have an application, written on c++ and compiled with VS 2010. I need to load .net dll written on C# and compiled for .net 4.0 platform from c++ code and call some functions. I have already done this through C++ CLR and its calling .net functions fine until .net 4.0 is not installed in the system.
When .net 4.0 is not installed any function call raises SEH exception in my c++ code, but library loading is successful. Every time exception code is the same 0xE0434F4D.
KERNELBASE.dll!RaiseException() + 0x3d bytes
mscorwks.dll!RaiseTheExceptionInternalOnly() + 0x295 bytes
mscorwks.dll!UnwindAndContinueRethrowHelperAfterCatch() + 0x63 bytes
mscorwks.dll!CorDllMainForThunk() + 0xcd bytes
mscoree.dll!CorDllMainWorkerForThunk() + 0x62 bytes
mscoree.dll!VTableBootstrapThunkInitHelper() + 0x12 bytes
mscoree.dll!VTableBootstrapThunkInitHelperStub() + 0x3e bytes
hs.exe!SrvAuth::PluginProxy::ProxyBody() Line 363 + 0x13 bytes C++
hs.exe!hs::hsThread::InvokableEntry(void * thread_obj=0x000000000024de90) Line 458 C++
msvcr100.dll!_callthreadstartex() Line 314 + 0xd bytes C
msvcr100.dll!_threadstartex(void * ptd=0x0000000000000000) Line 292 + 0x5 bytes C
kernel32.dll!BaseThreadInitThunk() + 0xd bytes
ntdll.dll!RtlUserThreadStart() + 0x21 bytes
Questions:
- Is it possible to determine target .net platform of the loaded dll from C++ code and to determine if such platform installed in the system?
- Maybe there is any other way prevent SEH exception and show human readable error explanation?
Thanks in advance
0xE0434F4D is the exception code for a managed exception. By the time you get that code it is already too late. The exception was unhandled, there's no live code left to interpret the exception. Improving error handling at such an early stage of the CLR booting up requires hosting the CLR yourself. Google CorBindToRuntimeEx to find the boilerplate code that's required.
Writing a better installer that ensures that .NET 4.0 is properly deployed on the machine might be a more fruitful plan of attack. It is really simple with a Setup project.