补一点COM的知识,有关_com_ptr_t

TLB文件是一个说明文件,通过TLB文件,用户可以得知你的DLL文件中的COM接口
以及常量等的信息,这样一来用户才知道你的DLL中有什么接口与常量等,用户才
能用你的接口,当然了,如果你的COM接口只想自己使用,你可以不做TLB文件告诉
其他人这些信息了。

在使用#import引入一个com组件的时候,会自动生成.tlh和.tli两个文件,这个两个文件是对com类的封装,tlh是标准头文件,里面为每个组件类定义了一个_com_ptr_t类型的智能指针,tli里面是代码文件,里面是对COM组件类的成员的封装,具体可以自己import一个msado15.dll看一下。

TLB常常会包含以下这个功能:
智慧型指標宣告:樣板類別 _com_ptr_t 屬於一個智慧型指標,該類別封裝了介面指標並排除呼叫 AddRef, Release, QueryInterface 等繁瑣的步驟。另外也隱藏了 CoCreateInstance 建立一個新的 COM 物件的呼叫。這個部分使用 _COM_SMARTPTR_TYPEDEF 來產生特異化(Specialization)版本的 _com_ptr_t 類別。例如:
 _COM_SMARTPTR_TYPEDEF(IMyInterface, __uuidof(IMyInterface));
 編譯器會將上述的程式擴展成
 typedef _com_ptr_t<_com_IIID<IMyInterface, __uuidof(IMyInterface)> > IMyInterfacePtr;

上面是在介绍.tlb包含的内容时说到的一点,会自想的时候动添加一个智能指针,以后创建COM对象的时候就可以不用CoCreateInstance了。
比如引入msado15.dll这个库后,会在msado15.tlh文件中有这样一句
_COM_SMARTPTR_TYPEDEF(_Connection, __uuidof(_Connection));
这句会被编译器扩展成
typedef _com_ptr_t<_com_IIID<_Connection,0x0> > _ConnectionPtr
然后就可以使用这个智能指针_ConnectionPtr了,创建COM对象时也只是

 

    _ConnectionPtr pMyConnect  =  NULL;
    HRESULT hr 
=  pMyConnect.CreateInstance(__uuidof(Connection));

那个__uuidof(Connection)中的Connection是个结构体,实际上是这样的

struct   /* coclass */  Connection;

定义在msado15.tlh文件中。

其他的诸如_RecordsetPtr,_CommandPtr都一样,都是com_ptr_t类型的。

 

原文:http://www.cnblogs.com/coderlee/archive/2008/02/18/1071755.html

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值