Windows桌面应用程序(1-2-3-2nd) 初始化COM库

任何使用COM的Windows程序都必须通过调用CoInitializeEx函数来初始化COM库。每个使用COM接口的线程都必须分别调用这个函数。CoInitializeEx具有以下签名:

HRESULT CoInitializeEx(LPVOID pvReserved,DWORD dwCoInit);

第一个参数是保留的,必须为NULL。第二个参数指定程序将使用的线程模型。COM支持两种不同的线程模型,单线程多线程。如果你指定了单线程,你正在做出以下保证:

  • 您将从单个线程访问每个COM对象;你将不会在多个线程之间共享COM接口指针。
  • 线程将有一个消息循环。(请参阅模块1中的窗口消息。)

如果其中任何一个约束不成立,请使用多线程模型。要指定线程模型,请在dwCoInit参数中设置以下标志之一。

标志描述
COINIT_APARTMENTTHREADED单线程。
COINIT_MULTITHREADED多线程。

您必须正好设置其中一个标志。通常,创建窗口的线程应使用COINIT_APARTMENTTHREADED标志,其他线程应使用COINIT_MULTITHREADED。但是,某些COM组件需要特定的线程模型。MSDN文档应该告诉你什么时候是这样的情况。

注意事项 实际上,即使指定了单元线程,仍然可以使用称为编组的技术共享线程之间的接口。编组超出了本模块的范围。重要的一点是,在使用单元线程的情况下,不能简单地将接口指针复制到另一个线程。有关COM线程模型的更多信息,请参阅进程,线程和单线程了解和使用COM线程模型
除了已经提到的标志之外,最好在dwCoInit参数中设置COINIT_DISABLE_OLE1DDE标志。设置这个标志避免了一些过时的技术与对象链接和嵌入(OLE)1.0相关的开销。
这里是你如何初始化COM公寓线程:

HRESULT hr=CoInitializeEx(NULL,COINIT_APARTMENTTHREADED|COINIT_DISABLE_OLE1DDE);

HRESULT返回类型包含错误或成功代码。我们将在下一节讨论COM错误处理。
删除COM库
对于每次成功调用CoInitializeEx,都必须在线程退出之前调用CoUninitialize。这个函数不带任何参数,也没有返回值。

CoUninitialize();

下一个
COM中的错误代码


原文链接:Initializing the COM Library

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值