저는 C++로 작성되었으며 VS 2010으로 컴파일 된 응용 프로그램을 가지고 있습니다. .net dll을 C#으로 작성하고 .net 4.0 플랫폼 용으로 컴파일해야합니다. C++ 코드를 작성하고 일부 함수를 호출하십시오. 이미 C++ CLR을 통해이 작업을 수행했으며 .net 4.0이 시스템에 설치되어 있지 않을 때까지 .net 함수를 호출 할 수있었습니다.C++ CLR 로딩 .net 4.0이 설치되지 않은 경우 .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 런타임 버전을 확인하기 위해