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

标签 delphi com apartments apartment-state

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

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

如何让主线程成为COINIT_MULTITHREADED

最佳答案

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

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

考虑这个程序:

{$APPTYPE CONSOLE}

uses
  ActiveX,
  ComObj;

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

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

关于delphi - 如何让控制台应用程序的主线程成为MTA?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57325229/

相关文章:

delphi - DWScript:从 IScriptObj 获取 IInfo 或 TProgramInfo

c# - 在 F# 中处理资源清理的功能方法

Python、ArcObjects 和 .AppRef : how to get from IAppROT to IMxDocument?

multithreading - 在流程外环境中,公寓 “live”是位于服务器端还是位于客户端?

com - 具有 MTA 的进程外 COM 服务器

multithreading - FreeThreadedDOMDocument,Neutral Apartments和Free-threaded Marshaler

.net - 如何在 Oxygene 中设置动态数组大小(SetLength 不起作用)

android - XE5 Android 位图.canvas

delphi - 我们如何连接网站?收到 SSL 错误 1409442E

c# - COM 互操作 : What should I do to make a C# property usable as a VARIANT from VBA