如何让控制台应用程序的主线程成为 MTA?

How to get the main thread of a console app to be MTA?

使用 Delphi,我如何创建一个主线程初始化为 COINIT_MULTITHREADED 的 (Windows) 控制台应用程序?

如果我在第一条语句中调用 CoInitializeEx(nil, COINIT_MULTITHREADED),我会得到一个 HRESULT 0x80010106(设置后无法更改线程模式),所以很明显之前的一些 运行 代码已经调用 CoInitialize/Ex.

如何让主线程成为COINIT_MULTITHREADED

由于您的 uses 子句而包含在您的程序中的一个单元已经在其单元初始化部分中初始化了 COM。

您需要识别该单元,并将其从您的程序中删除。

考虑这个程序:

{$APPTYPE CONSOLE}

uses
  ActiveX,
  ComObj;

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

输出是 0,表明空的控制台应用程序不会初始化 COM。