自动化(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语言基础及程序设计是IDL语言的核心内容,本文将对IDL语言的基本概念、数据类型、变量、操作符、控制结构、函数、数组和结构体等进行详细的介绍,并对IDL语言在程序设计中的应用进行深入的探讨。 1. IDL语言基础...
1. IDL 的基本概念:IDL 是一个中立语言,能够描述软件组件接口的语言规范,使得不同语言编写的软件组件之间能够相互通信。 2. IDL 的应用场景:IDL 通常用于 RPC(Remote Procedure Call,远程过程调用)软件,...
通过上述介绍,我们了解了IDL语言在文件读写操作方面的强大功能,包括格式化输入输出、ASCII文件的读写、二进制文件的读写以及图像文件的读写等。此外,我们也学习了如何使用IDL语言处理常见的科学数据格式如netCDF...
idlcpp的工作原理是,它接受一种特定的接口描述语言(IDL)作为输入,这种语言定义了C++和脚本语言之间需要交互的接口。通过解析这些接口定义,idlcpp会生成相应的C++源代码,包含了必要的封装和转换逻辑,使得C++...
遥感原理:通过IDL语言编写程序完成PCA 变换融合。参考遥感原理与应用,仅供学习和参考。
《徐永明-遥感二次开发语言IDL(完整版)》是一本专注于遥感技术中IDL(Interactive Data Language)编程的教程。IDL是美国ITT公司的产品,广泛应用于地球科学、天文学、医学成像和气象学等领域,尤其在遥感数据分析...
IDL,即交互式数据语言,是一种被广泛应用在地球科学、天文学、医学等多个领域的可视化编程语言。它的语法简洁而功能强大,特别适合处理大规模数据的可视化和分析。IDL由ITT VIS公司开发,可在Windows、MacOS和UNIX...
本资料集包含了“IDL可视化应用与分析”和“IDL入门与提高”两个主题,旨在帮助用户从基础到进阶全面掌握IDL的使用。 “IDL可视化应用与分析”部分,主要探讨了如何利用IDL进行数据的可视化表达和深度分析。在数据...
本书《IDL程序设计 数据可视化与ENVI二次开发》是关于IDL语言的辅导书籍,旨在帮助读者学习如何利用IDL进行数据的可视化表达以及如何对ENVI软件进行二次开发。本书内容丰富,适合作为学习和参考使用,尤其适合那些对...
标题中的"idl.rar_idl基本输入"表明这是一个与IDL(Interface Definition Language)相关的压缩文件,主要涉及IDL的基础输入方面。IDL是CORBA(Common Object Request Broker Architecture)中用于定义接口的标准...
实现自动化对象通常涉及以下步骤:定义接口(IDL文件),编译生成类型库,实现接口,注册对象到系统注册表。 4. **使用自动化对象的客户**:自动化对象的使用者有两种主要方式:早绑定和晚绑定。早绑定在编译时就...
本篇将深入探讨如何利用IDL进行GUI编程,包括IDL GUI的基本概念、idl参数设置以及如何构建一个简单的IDL界面。 首先,我们需要理解IDL GUI编程的核心思想。IDL GUI允许开发者通过定义控件和事件处理函数来创建用户...
综上所述,高级软件IDL与ORB接口是构建分布式系统的关键技术,它提供了标准化的接口定义方法,促进了不同系统之间的互操作性和可扩展性。掌握好IDL的使用,可以有效地提升软件的可维护性和复用性,降低系统维护成本...
IDL是一种接口描述语言,它的特点是独立于语言和平台,允许不同编程语言和操作系统之间的对象交互。 1. IDL的特点: - 清晰的边界:IDL类似于API,它在客户端代码和服务实现之间定义了一个明确的接口,确保客户...
10. **外部程序连接**:通过接口,IDL可以与其他程序和库进行交互,扩展其功能范围。 IDL的广泛应用不仅限于科研机构,如NASA、ESA、NOAA等,也在工业界,如Siemens、GE Medical等领域得到了广泛的采用。适普软件...
1. **接口定义**:IDL提供了定义COM接口的语言,这些接口描述了组件可以执行的操作,也就是方法和属性。接口定义是接口的二进制表示形式,可以被编译成不同语言的代码。 2. **数据类型跨语言兼容**:IDL定义的数据...
IDL(Interactive Data Language)是一种强大的科学计算和可视化语言,尤其在天文学领域有着广泛的使用。这个"IDL天文程序库"是专门为天文学家设计的一套工具集,但其功能的通用性使其同样适用于其他科学领域,如...
【标题】:“native_idl:Idl语言” 【描述】:“本地Idl IDL语言”指的是一种用于接口定义的语言(Interface Definition Language),在Rust编程语言中的应用,主要用于跨进程通信或者模块间的接口规范定义。idl...
IDL,全称Interactive Data Language,是一种强大的科学数据分析和可视化编程语言。在图像处理领域,IDL因其高效的数值计算和丰富的图形绘制能力而被广泛使用。本文将深入探讨如何使用IDL语言来读取和操作图像数据,...
"I DL二次开发.pdf"则针对已经存在的IDL程序或库进行扩展和修改,可能是关于如何利用IDL的开放性进行定制化开发的指南,涵盖了接口设计、模块化编程和错误处理等方面的知识。 "idl语言基础及程序设计.pdf"是另一本...