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文件是最新的。