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

Mar*_*tin 2 delphi com apartments apartment-state

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

如果我CoInitializeEx(nil, COINIT_MULTITHREADED)在第一条语句中调用,则会得到一个HRESULT 0x80010106(设置后无法更改线程模式),因此显然某些先前正在运行的代码已被调用CoInitialize/Ex

如何获得主线程COINIT_MULTITHREADED

Dav*_*nan 5

由于use子句而导致程序中包含的单元之一已在其单元初始化部分中初始化了COM。

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

考虑以下程序:

{$APPTYPE CONSOLE}

uses
  ActiveX,
  ComObj;

begin
  Writeln(CoInitializeEx(nil, COINIT_MULTITHREADED));
end.
Run Code Online (Sandbox Code Playgroud)

输出0结果表明一个空的控制台应用程序不会初始化COM。