Понятия не имею в случае 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()
уже был вызван.