Coinitialize(零)和CoInitializeEx(0,COINIT_MULTITHREADED)差异

时间:2013-11-09 19:35:22

标签: delphi com delphi-7

在一个帖子中, 如果我使用

,会有区别吗?
Coinitialize(nil)

而不是

CoInitializeEx(0, COINIT_MULTITHREADED);

我使用的是Delphi 7,但我认为其他编程语言仍然存在问题 谢谢你的帮助。

1 个答案:

答案 0 :(得分:13)

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

所以是的,存在差异,这可能非常重要。请阅读MSDN上的文档,它非常详细。

CoInitialize function

CoInitializeEx function

Processes, Threads, and Apartments