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對象時也只是
HRESULT hr = pMyConnect.CreateInstance(__uuidof(Connection));
那個__uuidof(Connection)中的Connection是個結構體,實際上是這樣的
定義在msado15.tlh文件中。
其他的諸如_RecordsetPtr,_CommandPtr都一樣,都是com_ptr_t類型的。
原文:http://www.cnblogs.com/coderlee/archive/2008/02/18/1071755.html