CoInitialize () / CoUninitialize () вызывает сопряжение - PullRequest
0 голосов
/ 28 января 2010

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

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

Но почему это так?MSDN говорит, что я могу звонить CoInitialize() несколько раз и должен только соединить эти вызовы с соответствующим количеством вызовов CoUnitialize().

Почему COM-объекты завершаются при первом вызове CoUninitialize().

1 Ответ

0 голосов
/ 28 января 2010

звучит так, как будто вы все делаете правильно, однако, убедитесь, что ваши вызовы по счету выполняются после закрытия главного окна приложения и после завершения цикла обработки сообщений для этого окна.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...