У меня довольно неловкая ситуация.
У меня есть один небольшой COM-компонент (назовем его SmallCOM), который представляет собой (Delphi) win32 dll, который я использую из управляемой сборки C # (через COM).
У меня есть один большой COM-компонент (назовем его BigCOM), который представляет собой (Delphi) win32 dll и который я использую из той же управляемой сборки c # (снова через COM).
И что самое забавное, BigCOM также создает и использует SmallCOM через COM.
Все это происходит в одном и том же процессе, и по какой-то причине я иногда сталкиваюсь с неуловимым исключением низкого уровня, говоря мне (когда анализируется с помощью 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 работает).
Итак, мой вопрос таков: решит ли проблема использование изолированного Reg-Free COM для изоляции SmallCOM в моем C # exe? Или BigCOM и C # exe, все еще использующие один и тот же процесс, будут использовать один и тот же SmallCOM.dll, несмотря ни на что?
Заранее спасибо!
Etienne.