У меня есть приложение, написанное на c ++ и скомпилированное с VS 2010. Мне нужно загрузить .net dll, написанную на C # и скомпилированную для платформы .net 4.0 из кода c ++, и вызвать некоторые функции.Я уже сделал это через C ++ CLR и его вызывающие .net функционируют нормально, пока .net 4.0 не установлен в системе.
Когда .net 4.0 не установлен, любой вызов функции вызывает исключение SEH в моем коде c ++,но загрузка библиотеки прошла успешно.Каждый раз, когда код исключения одинаков. 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
Вопросы:
- Можно ли определить целевую платформу .net загруженной библиотеки DLL из кода C ++ и определить, так ли этоПлатформа установлена в системе?
- Может быть, есть какой-нибудь другой способ предотвратить исключение SEH и показать понятное человеку объяснение ошибки?
Заранее спасибо