Кто отвечает за вызов CoInitialize и CoUninitialize в случае суррогатного процесса или COM + - PullRequest
1 голос
/ 23 марта 2010

Кто отвечает за вызов CoInitialize и CoUninitialize, если

1 - я размещаю COM dll в суррогатном процессе (с помощью утилиты dcomcnfg или мастера COM +)?

2 - я строюISAPI DLL, которая содержит COM-объекты?

1 Ответ

0 голосов
/ 24 марта 2010

Понятия не имею в случае 2, но в случае 1 суррогатный процесс, безусловно, вызывает CoInitialize() / CoUninitialize().Вот как я это знаю.

У нас есть COM-объект, который мы размещаем в COM + и который сам использует MS XML 4. Когда вам нужно создать объект XML-документа в MS XML 4, вы вызываете CoCreateInstance().Мы никогда не вызываем CoInitialize() в нашем COM-объекте, но создание документа всегда происходит успешно - суррогатные вызовы CoInitialize().Если мы сделаем то же самое в автономном приложении, создание документа завершится неудачно, если мы сами не назовем CoInitialize().

Итак, суть: COM + суррогат (и я уверен, что это относится и к суррогату DCOM)вызывает CoInitialize() сам.

Кстати, вы можете использовать это для расследования случая 2 - вызов CoCreateInstance() внутри ISAPI dll - если он успешен, CoInitialize() уже был вызван.

...