当前位置: 代码迷 >> 综合 >> 组件COM相关知识了解
  详细解决方案

组件COM相关知识了解

热度:53   发布时间:2023-10-31 05:50:48.0

idl与odl的区别

.odl和.idl在com中的功能相同.

前者是ActiveX中的 后者是ATL中.

odl ---对象定义语言

idl ---接口定义语言

idl包含完整的odl 语法

其实是一个功能就是在写法上有些不同

ATL和MFC

ATL和MFC代表了两种不同的框架,分别面向不同类型的基于Windows的开发

ATL提供了一种框架来实现创建COM客户机和服务器所必须的样板文件代码;

MFC代表了创建独立的Windows应用的一种简单、一致的方法。

这两种框架都可以用来创建ActiveX控件。

MFC ActiveX控件与ATL ActiveX控件的比较

1、两者均可使用VS IDE中AppWizard来建立框架,前者使用“MFC ActiveX Control Wizard”,后者使用“ATL COM AppWizard”。

2、用MFC建立的ActiveX控件的扩展名缺省为“.ocx”;用ATL(活动模板库)建立的扩展名缺省为“.dll”。

3、用MFC建立ActiveX控件要简单得多,原因是MFC省去聊很多低级的COM概念,且控件设计中可使用多种MFC类,如CString、 CWnd 、CDC等;用ATL建立ActiveX控件则复杂些,且只能使用Windows SDK(Win API)函数。

4、MFC ActiveX控件文件要比ATL的小,但需要MFC的DLL支持,且MFC的DLL(600K左右)要比ATL的DLL(20K左右)大得多。

5、介绍使用MFC设计ActiveX控件的资料和书籍很多,例子也不少;但介绍ATL ActiveX设计方面的书不多,具体例子可参考“Visual C++6.0开发使用手册”第21章及“Visual C++实战与提高-ActiveX篇”第11章。

6、为方便设计,与MFC类似,ATL也有许多C++模板l类(非MFC类),其中CWindow就是ATL模板类中所有窗口类的父类。关于ATL模板类的详细介绍及常用类的成员函数(又叫“方法”)见“Visual C++实战与提高-ActiveX篇”第10章。

ActiveX、OLE和COM的关系

COM是一个纯技术名词

OLE和ActiveX是建立在 COM之上的,是两个技术标准名称

OLE

对象的链接与嵌入(Object Linking and Embedded,OLE)

主要应用于应用程序间数据交换(之前的技术的DDE,简单了解一下就行)

OLE是Microsoft的复合文档技术,它的最初版本只是瞄准复合文档

后续版本OLE2中,导入了COM

ActiveX

宽松定义的、基于COM的技术集合

ActiveX和OLE的最大不同在于,OLE针对的是桌面上应用软件和文件之间的集成,而ActiveX则以提供进一步的网络应用与用户交互为主

Activex,OLE,COM都是微软的一些技术标准。Ole比较老后来发展成Activex,再后来发展成为COM OCX,DLL是扩展名。 Activex有两种扩展名OCX和DLL

ocx与dll的区别

一般跨语言做成OCX,OCX是以COM接口实现接口,DLL也可以实现COM接口,但多语言调用没有OCX方便

OCX是纯面向对象的,DLL就可以是函数接口,也可以是对象接口,应该说OCX是DLL中的一种。

tlb、tlh和tli文件的关系

tlb文件:com类型库文件。在需要使用对应com类的模块里,“#import ...*.tlb”使用之。

tlh、tli文件:他们是vc++编译器解析tlb文件生成的标准c++文件。

因为odl和tlb并不是C++标准的东东,有必要把它们翻译成标准的C++类型,使得C++开发者可以使用。相信vb和j++也会把tlb翻译成自己语言兼容的类型描述信息。

tlh相当于类型申明(头文件),tli相当于定义实现(CPP文件)。可以用写字板打开查看其内容。

备注一个重要的相关问题:

在VC下#import   "A.tlb"   no_namespace   named_guids;

编译后产生A.tlh和A.tli两个文件,但把TLB文件更新后,相应的两个文件没有更新。为什么?如果更新了tlb文件,需要在菜单里

选择全部重新编译,否则编译器仍然会认为.tlh和.tli文件是最新的。

  相关解决方案