我有一个应用程序,编写在C++和编译与VS 2010. 我需要加载.net dll编写的C#和编译.net 4.0平台从C++代码并调用一些函数。我已经通过C++ CLR及其调用.net函数完成了这项工作,直到.NET 4.0未安装在系统中。C++ CLR加载.net 4.0 dll当.net 4.0未安装
当.NET 4.0未安装时,任何函数调用都会在我的C++代码中引发SEH异常,但是库加载成功。 每次异常代码都是相同的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
问题:
- 是否有可能从C++代码确定加载的DLL的目标.NET平台,并确定是否在系统中安装这样的平台?
- 也许有什么其他方法可以防止SEH异常并显示人类可读的错误解释?
感谢事先确定目标组合的CLR运行库版本