`
javatoyou
  • 浏览: 1072160 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

自动化(Automation)基础概念:接口描述语言(IDL)与类型库(TypeLib)

阅读更多

自动化(Automation)基础概念:接口描述语言(IDL)与类型库(TypeLib)

许式伟 (版权声明)
2007-4-26

在前文,我们已经解释了:

接下来,让我们来解释两个同样常见的词:

  • 接口描述语言(IDL)
  • 类型库(TypeLib)

前文我们已经解释了二次开发接口(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语言基础及程序设计.pdf

    IDL语言基础及程序设计是IDL语言的核心内容,本文将对IDL语言的基本概念、数据类型、变量、操作符、控制结构、函数、数组和结构体等进行详细的介绍,并对IDL语言在程序设计中的应用进行深入的探讨。 1. IDL语言基础...

    IDL接口定义语言[定义].pdf

    1. IDL 的基本概念:IDL 是一个中立语言,能够描述软件组件接口的语言规范,使得不同语言编写的软件组件之间能够相互通信。 2. IDL 的应用场景:IDL 通常用于 RPC(Remote Procedure Call,远程过程调用)软件,...

    遥感二次开发IDL笔记

    通过上述介绍,我们了解了IDL语言在文件读写操作方面的强大功能,包括格式化输入输出、ASCII文件的读写、二进制文件的读写以及图像文件的读写等。此外,我们也学习了如何使用IDL语言处理常见的科学数据格式如netCDF...

    idlcpp:接口描述语言编译器,可生成用于轻松嵌入脚本语言(如python,lua等)的c ++源代码-lua source code

    idlcpp的工作原理是,它接受一种特定的接口描述语言(IDL)作为输入,这种语言定义了C++和脚本语言之间需要交互的接口。通过解析这些接口定义,idlcpp会生成相应的C++源代码,包含了必要的封装和转换逻辑,使得C++...

    遥感原理:通过IDL语言编写程序完成PCA 变换融合

    遥感原理:通过IDL语言编写程序完成PCA 变换融合。参考遥感原理与应用,仅供学习和参考。

    徐永明-遥感二次开发语言IDL(完整版)

    《徐永明-遥感二次开发语言IDL(完整版)》是一本专注于遥感技术中IDL(Interactive Data Language)编程的教程。IDL是美国ITT公司的产品,广泛应用于地球科学、天文学、医学成像和气象学等领域,尤其在遥感数据分析...

    02A-IDL语法基础:IDL简介、数据类型、常量、变量及数据转换1

    IDL,即交互式数据语言,是一种被广泛应用在地球科学、天文学、医学等多个领域的可视化编程语言。它的语法简洁而功能强大,特别适合处理大规模数据的可视化和分析。IDL由ITT VIS公司开发,可在Windows、MacOS和UNIX...

    IDL可视化应用与分析和IDL入门与提高(pdf版)

    本资料集包含了“IDL可视化应用与分析”和“IDL入门与提高”两个主题,旨在帮助用户从基础到进阶全面掌握IDL的使用。 “IDL可视化应用与分析”部分,主要探讨了如何利用IDL进行数据的可视化表达和深度分析。在数据...

    IDL程序设计 数据可视化与ENVI二次开发

    本书《IDL程序设计 数据可视化与ENVI二次开发》是关于IDL语言的辅导书籍,旨在帮助读者学习如何利用IDL进行数据的可视化表达以及如何对ENVI软件进行二次开发。本书内容丰富,适合作为学习和参考使用,尤其适合那些对...

    idl.rar_idl基本输入

    标题中的"idl.rar_idl基本输入"表明这是一个与IDL(Interface Definition Language)相关的压缩文件,主要涉及IDL的基础输入方面。IDL是CORBA(Common Object Request Broker Architecture)中用于定义接口的标准...

    推选文档自动化对象PPT.ppt

    实现自动化对象通常涉及以下步骤:定义接口(IDL文件),编译生成类型库,实现接口,注册对象到系统注册表。 4. **使用自动化对象的客户**:自动化对象的使用者有两种主要方式:早绑定和晚绑定。早绑定在编译时就...

    IDL_GUI.zip_GUI编程_IDL gui_IDL参数设置_IDl_IDl 界面

    本篇将深入探讨如何利用IDL进行GUI编程,包括IDL GUI的基本概念、idl参数设置以及如何构建一个简单的IDL界面。 首先,我们需要理解IDL GUI编程的核心思想。IDL GUI允许开发者通过定义控件和事件处理函数来创建用户...

    高级软件IDL与ORB接口ppt课件.ppt

    综上所述,高级软件IDL与ORB接口是构建分布式系统的关键技术,它提供了标准化的接口定义方法,促进了不同系统之间的互操作性和可扩展性。掌握好IDL的使用,可以有效地提升软件的可维护性和复用性,降低系统维护成本...

    高级软件工程03(IDL与ORB接口).ppt

    IDL是一种接口描述语言,它的特点是独立于语言和平台,允许不同编程语言和操作系统之间的对象交互。 1. IDL的特点: - 清晰的边界:IDL类似于API,它在客户端代码和服务实现之间定义了一个明确的接口,确保客户...

    ENVI中IDL语言编程技术

    10. **外部程序连接**:通过接口,IDL可以与其他程序和库进行交互,扩展其功能范围。 IDL的广泛应用不仅限于科研机构,如NASA、ESA、NOAA等,也在工业界,如Siemens、GE Medical等领域得到了广泛的采用。适普软件...

    IDL 精髓及其在com上的应用

    1. **接口定义**:IDL提供了定义COM接口的语言,这些接口描述了组件可以执行的操作,也就是方法和属性。接口定义是接口的二进制表示形式,可以被编译成不同语言的代码。 2. **数据类型跨语言兼容**:IDL定义的数据...

    IDL天文程序库

    IDL(Interactive Data Language)是一种强大的科学计算和可视化语言,尤其在天文学领域有着广泛的使用。这个"IDL天文程序库"是专门为天文学家设计的一套工具集,但其功能的通用性使其同样适用于其他科学领域,如...

    native_idl:Idl语言

    【标题】:“native_idl:Idl语言” 【描述】:“本地Idl IDL语言”指的是一种用于接口定义的语言(Interface Definition Language),在Rust编程语言中的应用,主要用于跨进程通信或者模块间的接口规范定义。idl...

    用IDL语言读取并操作图像数据

    IDL,全称Interactive Data Language,是一种强大的科学数据分析和可视化编程语言。在图像处理领域,IDL因其高效的数值计算和丰富的图形绘制能力而被广泛使用。本文将深入探讨如何使用IDL语言来读取和操作图像数据,...

    IDL语言资料集

    "I DL二次开发.pdf"则针对已经存在的IDL程序或库进行扩展和修改,可能是关于如何利用IDL的开放性进行定制化开发的指南,涵盖了接口设计、模块化编程和错误处理等方面的知识。 "idl语言基础及程序设计.pdf"是另一本...

Global site tag (gtag.js) - Google Analytics