调用方通过CoInitializeEx
函数初始化线程的公寓类型时,可以通过传递不同的标志来明确指定使用STA还是MTA模式,或者允许系统根据组件需求自动选择。下面是几个关键的标志:
-
COINIT_APARTMENTTHREADED:此标志用于初始化线程为Single-Threaded Apartment (STA) 模式。在STA模式下,COM对象被绑定到创建它们的线程,通常适用于需要UI交互或对线程安全性有特殊要求的组件。
深色版本
1HRESULT hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
-
COINIT_MULTITHREADED:此标志用于初始化线程为Multi-Threaded Apartment (MTA) 模式。在MTA模式下,COM对象可以被多个线程同时访问,但开发者需负责处理多线程环境下的同步问题。
深色版本
1HRESULT hr = CoInitializeEx(NULL, COINIT_MULTITHREADED);
-
COINIT_DISABLE_OLE1DDE:这是一个可选的附加标志,通常与上述任一标志组合使用,以禁用OLE1 DDE(动态数据交换)支持。在大多数现代应用中,这个标志可以安全使用。
-
COINIT_SPEED_OVER_MEMORY:这也是一个可选标志,提示COM优化以提高速度而非最小化内存使用。通常情况下,这个标志对性能的影响不大,但在某些特定场景下可能有益。