Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi Coinitialize(nil)和CoInitializeEx(0,Conit_多线程)的差异_Delphi_Com_Delphi 7 - Fatal编程技术网

Delphi Coinitialize(nil)和CoInitializeEx(0,Conit_多线程)的差异

Delphi Coinitialize(nil)和CoInitializeEx(0,Conit_多线程)的差异,delphi,com,delphi-7,Delphi,Com,Delphi 7,在一个线程中, 如果我使用 Coinitialize(nil) 而不是 CoInitializeEx(0, COINIT_MULTITHREADED); 我使用Delphi7,但我认为这个问题对于其他编程语言仍然存在 感谢您的帮助。前者初始化COM的方式是将调用线程放入其自己的单线程单元(STA)。后者以将调用线程放入共享多线程单元(MTA)的方式初始化COM。这两个单元具有非常不同的语义,特别是在如何跨线程边界访问COM对象方面。不同单元中的线程必须使用代理共享COM对象,但COM为您提供

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

Coinitialize(nil)
而不是

CoInitializeEx(0, COINIT_MULTITHREADED);
我使用Delphi7,但我认为这个问题对于其他编程语言仍然存在
感谢您的帮助。

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

因此,是的,这是一个差异,它可以是非常重要的。请阅读MSDN上的文档,它非常详细


您是否阅读了
CoInitialize
上的文档?是的,我读了,但不清楚您是否可以详细说明文档的哪一部分。