У меня есть однопоточное приложение, которое использует COM-объекты.Сначала я фактически вызываю CoInitialize(0)
дважды - один раз в моем коде и второй раз в коде другой подсистемы приложения.Первый вызов возвращает S_OK
, второй возвращает S_FALSE
- точно так, как говорит MSDN.
Когда приложение останавливается, оно вызывает CoUninitialize()
дважды, но между этими вызовами оно пытается вызвать методы некоторых COM-объектов -эти вызовы просто сбой с нарушением доступа, потому что я предполагаю, что COM-объекты завершаются и освобождаются при первом вызове CoUnitialize()
.Если я уберу дублирующие вызовы на CoInitialize()
/ CoUnitialize()
, все будет работать нормально.
Но почему это так?MSDN говорит, что я могу звонить CoInitialize()
несколько раз и должен только соединить эти вызовы с соответствующим количеством вызовов CoUnitialize()
.
Почему COM-объекты завершаются при первом вызове CoUninitialize()
.