自动化(Automation)基础概念:接口描述语言(IDL)与类型库(TypeLib)
许式伟 (版权声明)
2007-4-26
在前文,我们已经解释了:
接下来,让我们来解释两个同样常见的词:
前文我们已经解释了二次开发接口(API),它是应用程序用来向外部程序(或插件)提供服务的。我们理一下思路:
清楚了这些,剩下来的问题是:既然应用程序API是接口,是一种二进制协议,那么,第三方如何知道应用程序提供的接口是什么样子的呢?这就是本文要回答的内容。
每一种语言的模块,为了可以被用来提供给其他模块调用,都有自己固有的习惯。例如,C/C++程序员很习惯对外提供一个.dll/.so,外加一个.h文件对接口进行描述(有时还会带上一个.lib文件,不过这里我们假设.dll总是提供了标准的COM组件,那么.lib是不需要的)。
为了是的应用程序提供的接口可以让更多人可以使用,为了使任意语言的程序员能彼此理解对方,理解对方的API接口(DOM模型的对象树),就需要有统一的规范。我们需要借助一种中间语言对接口进行描述,这就是接口描述语言(IDL)的由来。
那么类型库(TypeLib)又是什么呢?有人说,类型库(TypeLib)是IDL编译后的结果,IDL是基于纯文本的,可以方便人们阅读,而类型库(TypeLib)是二进制的,方便机器处理。
这么说当然没有错。但是并没有解释类型库(TypeLib)存在的价值。
我个人认为,类型库(TypeLib)最重要的作用是充当了元信息(Meta)的作用,你可以认为这是一种规范化的RTTI。从此意义上来讲,我们不难明白,为什么MS认为.NET是COM的延续 —— 类型库(TypeLib)所能够描述的元信息(Meta)仍然不够丰富,语言之间的壁垒仍然存在。
类型库(TypeLib)的主要作用在于:
- RTTI - 为运行时刻动态获得某种对象接口的元信息(Meta)提供可能。通过类型库(TypeLib),你可以很轻松获得类(或接口)的种种信息,如:
- 类名
- 基类
- 方法列表(包括方法的原型,方法的名称)
- 属性列表(包括属性的类型,属性的名称)
- 等等
- 通过这种RTTI,为程序员提供各种服务。例如:
- 自动实现双接口中的IDispatch接口。
- Visual Basic集成环境(或其他IDE环境)提供的自动完成(只要你加载了TypeLib)。
- 根据TypeLib进行自动代码生成(如MFC程序可以导入一个TypeLib自动为其生成相应的C++头文件/Wrapper源代码)等。
- 由于类型库(TypeLib)包含了接口的完整信息,它一定程度上起到取代IDL或.h文件的作用。考虑到TypeLib可以作为应用程序的资源存在,这样我们发布程序的时候,就不需要无谓再带上IDL或者提供额外的.h文件。
相信你已经很清楚IDL和TypeLib这两个重要概念了。我这里提供一个CodeGuru(这里作了修正。抱歉,我记忆成CodeProject了)上的一个例程结束本文。该程序枚举类型库(TypeLib)中的信息,并将其打印出来,略微改变一下,应该可以做出一个实际可用的应用程序。相信有人需要,希望对你有帮助。到这里下载:TypeLibEnum.rar。
补充:如果你只是要查看类型库(TypeLib)——事实上,多数人属于这种情况,而不是编程对它进行操作,那么你可以:
- 通过Visual Studio(我知道VS 6.0版本有,更高版本未确认)带的OLE View(全称是OLE/COM Object Viewer)进行查看。File菜单下有View TypeLib...选项。当然哪些已经注册到系统的TypeLib,已经直接列出来了。
- 通过Microsoft提供的各种对象浏览器查看。对象浏览器在很多MS的产品中都带了,例如Visual Basic 6.0,包含VBA支持的应用程序(如Word/Excel/PowerPoint等等),Visual Studio 2005,等等。
分享到:
相关推荐
遥感原理:通过IDL语言编写程序完成PCA 变换融合。参考遥感原理与应用,仅供学习和参考。
idlcpp 接口描述语言编译器,可生成用于轻松嵌入脚本语言(如python,lua等)的c ++源代码。
遥感二次开发语言IDL,本书为完整版,共279页,对IDL语言基础学习有较大帮助,希望可以帮到大家。
第二章 数据分析工具:IDL编程课程要求和考核方式课程基础高等数学/线性代数/概率论与数理统计高级程序语言与程序设计( C )/Matlab 程序设计学习目的1
IDL接口定义语言[定义].pdf
OPC DA 自动化接口 2.02规范以及IDL文件,下载后直接用MIDL命令编译.idl文件
遥感:IDL语言实现间接法图像旋转,适合初学者,无斑点噪声
大气遥感:idl语言计算多光谱影像的协方差,适合初学者,对数据进行数学计算
IDL编程语言简介。基础应用及入门。基本语法结构描述。
IDL语言2014教材:交互式数据语言IDL(Interactive Data Language)是进行科学数据分析、可视化表达和跨平台应用开发的高效软件和理想工具。IDL作为第四代语法简单、面向矩阵运算的计算机语言,拥有丰富的分析工具包...
java开发华为corba接口所需要的华为idl文件,用于编译生成华为corba服务端接口. corba开发参考:https://my.oschina.net/dong706/blog?catalog=5757620
遥感原理:使用IDL语言完成简易的两幅图像的直方图匹配,输出结果并保存。仅供学习和参考。
第1章 IDL语言简介 1.1 IDL的背景 1.2 IDL的特点 1.3 IDL学习资源 第2章 IDL工作台 2.1 工作台启动 2.2 工作台组成 2.2.1 菜单栏 2.2.2 工具栏 2.2.3 项目资源管理器 2.2.4 代码区域 2.2.5 控制台 2.2.6...
IDL天文程序库,虽然是天文行业人员开发的程序,但是也可以广泛应用于各个领域。可以进行方便的列读取,列写入;丰富的拟合程序;画图程序等。
C++ 11映射试图避免限制ORB开发人员的实现自由。对于每个OMG IDL构造,C++ 11映射解释使用C++ 11的构造的语法和语义。如果客户机或服务器程序使用C++ 11映射子句中所描述的结构,则符合此映射(是C++ 11)。
HDF 分层数据格式和IDL 交互式数据语言* 摘要:HDF 是一种新型的、有别于传统数据文件格式的分层数据格式,它的数据结构更为复杂,因此可包 含更为全面的数据及其数据各项属性的信息。除利用一般的程序读取语言外,...
IDL数据基本类型,介绍IDL的常用基本数据类型,一个很有用的表格。
注意:这是我的帖子“restore_idl”的更新版本,自从我的电子邮件地址更改后,我无法再修改它。 请参阅该帖子的评论,以了解用户对此有何评论。 如下所述,提供数据的所有问题都已得到解决,从而增强了处理完整数据...
IDL是在Qt / QML接口之后设计的,因此经过优化可生成与Qt C ++或Qt QML一起使用的源代码,但并不限于此用例。 QFace在设计上已经非常快,并且适用于大型IDL文档集。 此外,它可以使用缓存来避免解析未更改的IDL...
IDL可视化应用与分析和IDL入门与提高(pdf版),当前国内主要的IDL课本(pdf)版