Как сделать основной поток консольного приложения MTA?

С помощью Delphi, как я могу создать консольное приложение (Windows) с основным потоком, который инициализируется как COINIT_MULTITHREADED?

Если я позвоню CoInitializeEx(nil, COINIT_MULTITHREADED) в самом первом операторе я получаю HRESULT 0x80010106 (невозможно изменить режим потока после того, как он установлен), поэтому, очевидно, некоторый ранее запущенный код уже вызывался CoInitialize/Ex,

Как я могу получить основной поток, чтобы быть COINIT_MULTITHREADED?

1 ответ

Решение

Один из модулей, включенных в вашу программу в результате использования вашего предложения, уже инициализировал COM в своем разделе инициализации модуля.

Вам нужно идентифицировать этот блок и удалить его из вашей программы.

Рассмотрим эту программу:

{$APPTYPE CONSOLE}

uses
  ActiveX,
  ComObj;

begin
  Writeln(CoInitializeEx(nil, COINIT_MULTITHREADED));
end.

Выход 0 который демонстрирует, что пустое консольное приложение не инициализирует COM.

Другие вопросы по тегам