CoInitialize的(无)和的CoInitializeEx(0,COINIT_MULTITHREADED)差

问题描述:

在一个线程, 是有区别,如果我使用代替CoInitialize的(无)和的CoInitializeEx(0,COINIT_MULTITHREADED)差

CoInitializeEx(0, COINIT_MULTITHREADED); 

Coinitialize(nil) 

我使用Delphi 7,但我相信该问题可以保留其他编程语言 感谢您的帮助。

+4

你阅读'CoInitialize'的文档? –

+0

是的,我做了,但不明确 – user382591

+2

也许你可以详细说明你正在努力的文档的哪一部分。 –

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

所以是的,有一个区别,它可以是非常重要的。请阅读MSDN上的文档,它非常详细。

CoInitialize function

CoInitializeEx function

Processes, Threads, and Apartments