delphi - Coinitialize(nil) 和 CoInitializeEx(0, COINIT_MULTITHREADED) 区别

标签 delphi com delphi-7

在一个线程中, 如果我使用

有什么区别吗
Coinitialize(nil)

而不是

CoInitializeEx(0, COINIT_MULTITHREADED);

我使用 Delphi 7,但我认为其他编程语言也可能存在这个问题 感谢您的帮助。

最佳答案

前者以将调用线程放入其自己的单线程单元 (STA) 的方式初始化 COM。后者以将调用线程放入共享多线程单元 (MTA) 的方式初始化 COM。这两个单元具有非常不同的语义,特别是在如何跨线程边界访问 COM 对象方面。不同单元中的线程必须使用代理来共享 COM 对象,但 COM 为您提供同步(通过每线程消息队列)。同一单元中的线程可以在不使用代理的情况下共享 COM 对象,但必须手动同步,例如使用临界区或互斥锁。

所以,是的,确实存在差异,而且差异可能非常显着。请阅读MSDN上的文档,非常详细。

CoInitialize function

CoInitializeEx function

Processes, Threads, and Apartments

关于delphi - Coinitialize(nil) 和 CoInitializeEx(0, COINIT_MULTITHREADED) 区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19882174/

相关文章:

delphi - FireMonkey:从 Samba 读取 OS X 中的文件

c# - MethodImplAttribute(InternalCall, Runtime) 对 COM Interop 接口(interface)的方法有何作用?

VBA CreateObject 无法在 64 位 Windows 上创建 ActiveX 组件

delphi - 如何在Delphi中结合重载和stdcall?

android - 启动 Delphi Android 应用程序时为 "Class TForm1 not found"。应用程序运行良好

delphi - 双缓冲形式导致文本框角落出现黑点

delphi - 结构化异常处理程序和 Delphi

c++ - 如何从非托管 C++ 调用托管 C++ 方法

delphi - TStringList 局部变量未初始化为 nil - 为什么?

sql-server - 为什么带有日期/时间值的 TADOTable 中的 Locate() 不起作用