在vc中使用组件的两种方法

当我们想要在vc中调用一个DLL文件所提供的组件的时候怎么办?

第一种方法: 是使用.tlb.

假如我们想调用msxml4.dll中提供的组件来操作XML文件.

 

那么首先要调用#import "msxml4.dll", 

然后你就可以使用msxml4.dll中提供的组件了,比如说

::CoInitialize(NULL);//初始化COM环境   一定要加   不要忘记!!!
 
 MSXML2::IXMLDOMDocumentPtr pDoc;
 MSXML2::IXMLDOMElementPtr xmlRoot;

    //创建DOMDocument对象
 HRESULT hr = pDoc.CreateInstance(__uuidof(MSXML2::DOMDocument40));
 if(!SUCCEEDED(hr))
 { 
  MessageBox("无法创建DOMDocument对象,请检查是否安装了MS XML Parser 运行库!");
  return ;
 }
 else
 {

 }
 //根节点的名称为Book
 //创建元素并添加到文档中
 xmlRoot=pDoc->createElement((_bstr_t)"Book");

 //设置属性
 xmlRoot->setAttribute("id",(const char *)m_strId);
 xmlRoot->Puttext((_bstr_t)(const char *)m_strAuthor);
 pDoc->appendChild(xmlRoot);
 MSXML2::IXMLDOMElementPtr pNode;
 
 //添加“author”元素
 pNode=pDoc->createElement((_bstr_t)"Author");
 pNode->setAttribute("id",(const char *)m_strId);
 pNode->Puttext((_bstr_t)(const char *)m_strAuthor);
 xmlRoot->appendChild(pNode);
 
 //添加“Title”元素
 pNode=pDoc->createElement("Title");
 pNode->Puttext((const char *)m_strTitle);
 xmlRoot->appendChild(pNode);
 
 //保存到文件
 //如果不存在就建立,存在就覆盖
 pDoc->save("d://he.xml");
 

 

重点:

1  #import "msxml4.dll"

这条语句的作用是产生.tlh和.tli文件.

 

你查看你的工程文件, 在编译后, 在debug或release文件夹中会产生两个文件msxml4.tlh, msxml4.tli.

在vc中打开它们可以看到, msxml4.tlh是头文件, 有各个接口类的定义, 而msxml4.tli是实现文件, 有接口类函数的代码.

 

我们在某些代码中可以看到这样的语句:  #import "filename.tlb"

它的作用与#import "filename.dll"是一样的, 只是有的组件会提供单独的.tlb文件, 有的会把.tlb嵌入到.dll.(嵌入的方法是生成.tlb和.dll后, 将.tlb作为资源插入到dll中,再次生成

dll, .tlb就已经存在于.dll中了)

 

 

.tlb文件叫做类型库文件, 组件的创作者用MIDL编译器编译它的IDL文件产生的.

 

com的优点之一是跨语言, 既然要跨语言, 就是要用什么语言都能写COM, 而且写出来的东西什么语言都可以使用.

 

为了实现这个目的, COM使用了IDL语言来定义接口, MID把这个IDL文件编译后,生成一个.TLB文件, 在该文件中包括组件定义等等的信息.

当VC想要调用该组件的接口时, 使用#import "filename.tlb", VC编译器会解析该filename.tlb文件, 并在你的工程目录中生成对就的filename.tli 和 filename.tlh文件, 你可以在其中查找到接口名字. 然后就可以在程序中使用了.

 

 第二种方法是使用组件的包装类.

当我们有了一个组件文件后(filename.dll), 在vc中有一个工具,可以为该组件生成一个包装类. 在vc中就可以使用这个包装类来生成对应的对象.

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值