我有一个应用程序,用 c++ 编写并用 VS 2010 编译。我需要加载用 C# 编写并从 c++ 代码为 .net 4.0 平台编译的 .net dll 并调用一些函数。我已经通过 C++ CLR 及其调用 .net 函数完成了这项工作,直到系统中没有安装 .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 异常并显示人类可读的错误解释?
提前致谢