Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
在一个线程中,如果我使用有区别吗
Coinitialize(nil)
代替
CoInitializeEx(0, COINIT_MULTITHREADED);
我使用 Delphi 7,但我认为其他编程语言的问题可能仍然存在。感谢您的帮助。
前者以将调用线程放入其自己的单线程单元 (STA) 的方式初始化 COM。后者以将调用线程放入共享多线程单元 (MTA) 的方式初始化 COM。这两个单元有非常不同的语义,尤其是在如何跨线程边界访问 COM 对象方面。不同套间中的线程必须使用代理来共享 COM 对象,但 COM 为您提供同步(通过每个线程的消息队列)。同一个单元中的线程可以在不使用代理的情况下共享 COM 对象,但必须手动同步,例如使用临界区或互斥锁。
所以是的,存在差异,并且可能非常重要。请阅读 MSDN 上的文档,非常详细。
初始化函数
CoInitializeEx 函数
进程、线程和单元