C++ で記述され、VS 2010 でコンパイルされたアプリケーションがあります。C# で記述され、.net 4.0 プラットフォーム用にコンパイルされた .net dll を c++ コードからロードし、いくつかの関数を呼び出す必要があります。.net 4.0がシステムにインストールされなくなるまで、C++ CLRとその呼び出し.net関数を使用してこれを既に行っています。
.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
質問:
- ロードされた dll のターゲット .net プラットフォームを C++ コードから特定し、そのプラットフォームがシステムにインストールされているかどうかを特定することはできますか?
- SEH例外を防ぎ、人間が読めるエラーの説明を表示する方法が他にあるのでしょうか?
前もって感謝します