двойные вызовы CoInitialize () - PullRequest
       0

двойные вызовы CoInitialize ()

5 голосов
/ 19 октября 2011

Допустим, мое приложение вызывает CoInitialize при запуске и CoUninitialize до того, как оно существует.

Если у меня есть сторонний компонент, который используется моим приложением и выполняет аналогичные действия, это вызовет какой-то сбой?

нормально ли вызывать CoInitialize, когда этот вызов уже был отправлен? второй вызов не удастся? или он просто «пропустит», как он уже называется.

Ответы [ 2 ]

6 голосов
/ 19 октября 2011

CoInitialize вернет S_FALSE, если оно уже было инициализировано в вызывающем потоке.Однако для обоих вызовов, которые возвращают S_OK и S_FALSE, должен быть вызов CoUninitialize.Количество вызовов к этим функциям подсчитывается, и только когда число CoUninitialize равно количеству CoInitialize, это фактически неинициализирует вещи.

Таким образом, в заключение, второй вызов безвреден, и естьнет проблем с вызовом этой пары функций более одного раза.

2 голосов
/ 19 октября 2011

Это в корне неверно, CoInitialize () должен вызываться кодом, который владеет потоком.Который никогда не является сторонним компонентом, если он действует как внутрипроцессный сервер и не запускает свои собственные потоки.

И конечно, это может и не получится, если он не согласен с типом квартиры,Это то, что он не может гарантировать, STA является обычным выбором, и это требует прокачки цикла сообщений.Компонент этого не сделает, это работа хоста.И если тип квартиры является несоответствующим, то он должен маршалировать указатель интерфейса.Что он не будет делать, когда полагается на выбор типа своей квартиры.

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