私はかなり厄介な状況にあります。
私は(COMを介して)マネージC#アセンブリから使用する(Delphi)win32 dllである1つの小さなCOM公開コンポーネント(SmallCOMと呼びましょう)を持っています。
(Delphi)win32 dllであり、同じマネージc#アセンブリから(COMを介して)使用する1つの大きなCOM公開コンポーネント(BigCOMと呼びましょう)があります。
そして「面白い」部分は、BigCOM もインスタンス化して、COM を介して SmallCOM を使用することです。
これはすべて同じプロセスで発生し、何らかの理由で、(windgb を使用して分析した場合) 次のことを教えてくれる、キャッチできない低レベルの例外が発生することがあります。
STACK_COMMAND: .cxr 00000000 ; kb ; ~10s; .ecxr ; kb
SYMBOL_STACK_INDEX: 2
SYMBOL_NAME: SmallCOM+178c6
FOLLOWUP_NAME: MachineOwner
MODULE_NAME: SmallCOM
IMAGE_NAME: SmallCOM.dll
DEBUG_FLR_IMAGE_TIMESTAMP: 2a425e19
FAILURE_BUCKET_ID:
NULL_CLASS_PTR_DEREFERENCE_c0000005_SmallCOM.dll!Unloaded
BUCKET_ID: APPLICATION_FAULT_NULL_CLASS_PTR_DEREFERENCE_INVALID_POINTER_WRITE_SmallCOM+178c6
WATSON_STAGEONE_URL: http://watson.microsoft.com/StageOne/C#Service_exe/2_4_0_1/4ad7147f/ntdll_dll/5_2_3790_3959/45d70ad8/c0000005/0004afb2.htm?Retriage=1
Followup: MachineOwner
BigCOM は SmallCOM との連携を完了し、それを解放したため、C# exe から再び使用することはできなくなったと思います (そして、再読み込みは論外です。exe は高度にマルチスレッド化されたサービスであり、この SmallCOM を使用します)。 BigCOM が動作している場合でも)。
だから、私の質問は次のとおりです。Isolated Reg-Free COM を使用して、C# exe で SmallCOM を分離すると問題が解決しますか? それとも、同じプロセスを共有している BigCOM と C# exe は、何があっても同じ SmallCOM.dll を使用しますか?
前もって感謝します!エティエンヌ。