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对象时也只是
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
那个__uuidof(Connection)中的Connection是个结构体,实际上是这样的
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
定义在msado15.tlh文件中。
其他的诸如_RecordsetPtr,_CommandPtr都一样,都是com_ptr_t类型的。