请达人解释一下——*.tlh *.tli

winkkle 2003-09-24 09:16:01
ICDBIPtr pTemp;
HRESULT hr=pTemp.CreateInstance(CLSID_CDBI);

其中CLSID_CDBI,我查找了一下,是在*.tlh中定义的,可是ATL COM 向导生成的文件夹中并没有此文件,请问这是怎么回事?

extern "C" const GUID __declspec(selectany) CLSID_CDBI =
{0x69dbdeed,0x9590,0x4f4f,{0x86,0x29,0x68,0x55,0x8d,0x0b,0x8c,0x93}};


...全文
77 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
winkkle 2003-09-24
  • 打赏
  • 举报
回复
谢谢
lop5712 2003-09-24
  • 打赏
  • 举报
回复
那两个文件是#import预处理指令在编译前根据其指定的类型库位置(可以是.tlb .dll .exe等)获取类型信息,再根据此类型信息生成包装类,CLSID、IID等,并提供如错误处理、智能指针等方便功能。这些功能的实现是通过预编译器生成的*.tlh和*.tli,将原来放#import的地方原封替换为*.tlh文件的内容(相当于将#import "YourDll.dll"换成#include "YourDll.tlh"),而*.tli在*.tlh中被一同包含,因此可以使用ICDBIPtr这个智能指针。
不过不知楼主怎么做的,#import生成的*.tli和*.tlh不会以上面的形式声明CLSID和IID,而是使用__uuidof操作符来获取CLSID和IID。因为*.tlh和*.tli可能被包含在两个以上的源文件中,如果使用上面的定义方式,则多个模块文件有多个实例,连接时将会发生错误。
所以,如果你想使用CLSID,对于你上面的代码,极有可能是CoCreateInstance( __uuidof( CDBI ) );而IID极有可能是__uuidof( ICDBI )

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧