私が作成したC++/CLI混合モードDLLに問題があります。それを終了する.NETアプリケーションが終了すると、例外がスローされます。 DLL_PROCESS_DETACH
が実行された後、DLLは自動的に使用して、実行時には、クリーンアップしatexit()/__onexit()
関数を登録し、次の例外スロー:私は静的ブースト例外オブジェクトget_static_exception_object()
によって登録されているatexit()
コールに問題をトレースしてきました終了時に混在モードのC++/CLI DLLが例外をスローする
Unhandled exception at 0x752bb9bc (KernelBase.dll) in psstestm.exe:
0xC0020001: The string binding is invalid.
を。
function_to_call 0x0f560410 [email protected][email protected][email protected][email protected][email protected]@@@[email protected]@@[email protected]@[email protected]@[email protected]@YAXXZ void (void)*
私は静的ブーストを除いて、ほとんどの部分::動的loaderlockを避けるためにリンクされているスレッドのリンクboost_1_47を使用しています。私はまた、動的には、助けていないすべてのブーストのリンクを試みました。また、ブーストのすべてが#pragma unmanaged
ブロックで囲まれています。
誰かが似たような問題を抱えていたり、解決策を知りたいと思っていますか?ここで
おかげで、マーク
は、例外が発生する直前にコールスタックです:
psscorem.dll!_CRT_INIT(void * hDllHandle=0x0f4b0000, unsigned long dwReason=0, void * lpreserved=0x00000001) Line 413 C
psscorem.dll!__DllMainCRTStartup(void * hDllHandle=0x0f4b0000, unsigned long dwReason=0, void * lpreserved=0x00000001) Line 526 + 0x11 bytes C
psscorem.dll!_DllMainCRTStartup(void * hDllHandle=0x0f4b0000, unsigned long dwReason=0, void * lpreserved=0x00000001) Line 476 + 0x11 bytes C
[email protected]() + 0xde bytes
[email protected]() + 0xad bytes
[email protected]() + 0x14 bytes
[email protected]() + 0x141 bytes
[email protected]() + 0x74 bytes
kernel32.dll!749479f5()
mscoreei.dll!RuntimeDesc::ShutdownAllActiveRuntimes() + 0xc8 bytes
mscoreei.dll!CLRRuntimeHostInternalImpl::ShutdownAllRuntimesThenExit() + 0x15 bytes
clr.dll!EEPolicy::ExitProcessViaShim() + 0x66 bytes
clr.dll!SafeExitProcess() + 0x99 bytes
clr.dll!DisableRuntime() - 0x1146bb bytes
clr.dll!EEPolicy::HandleExitProcess() + 0x57 bytes
[email protected]() + 0x11c bytes
[email protected]() + 0x1c bytes
[email protected]() + 0x38 bytes
[email protected]() + 0x227 bytes
[email protected]() + 0x8 bytes
[email protected]@12() + 0x12 bytes
[email protected]() + 0x27 bytes
[email protected]() + 0x1b bytes
ありがとうございます!私はこれを永遠に追跡してきました。私はC++を知っていないので、atexitを呼び出す方法を理解するのに十分です。 – pedz