我正在学习COM,所以有些基本问题困扰着我......
我知道IDL文件用于描述方法定义(或软件模块之间所谓的“契约”),而.H头文件包含的方法原型类似于IDL的含义对于。那么,为什么这两件事并存?还不够吗?
非常感谢。
答案 0 :(得分:8)
接口描述语言(IDL)本身就是一种小语言,它提供了一种独立于编程语言的方式来描述接口。工具从.idl生成.h文件。
如果你只有一个.h文件,就不可能用另一种编程语言来绑定它。 .h文件非常特定于C和C ++代码。
其他一些差异是.h文件中你有时可以实现实现以及声明,以及类成员变量。而在IDL中,您严格定义了一个接口。
答案 1 :(得分:1)
接口描述语言(或 或者,接口定义 语言),或简称IDL,是一个 用于的规范语言 描述一个软件组件 接口。 IDL描述了一个接口 以语言中立的方式,启用 软件之间的通信 不共享的组件 语言 - 例如,之间 用C ++编写的组件 用Java编写的组件。
另一方面,.H文件由C / C ++编译器专门用于生成代码对象。所以,它们是特定于语言的。
答案 2 :(得分:1)
IDL以独立于语言/平台的方式描述软件组件的接口,将实现任务委派给供应商特定工具。这些工具将IDL定义转换为被调用者的实际类(包括其包含),以及可以编译并链接到调用者的“存根”类。存根类公开IDL中定义的远程被调用者服务的接口,但除了通过ORB将请求发送到远程服务并将结果处理回调用者之外,它不执行任何任务。
编辑:在评论中的答案
谢谢Stefano。所以,IDL绝不是 另一个“标准”受到尊重 各种语言,不同 IDL感知语言有自己的 用于理解IDL文件的工具 把它转换成可以理解的 格式,例如C ++头文件 包含ORB类声明。 我现在好吗?
是和否。 IDL是表示组件接口的标准,用于进程间通信的导出接口(以及许多其他东西)。 OMG小组(在corba和idl的标准化背后)也有idl概念和各种语言之间的映射:见http://www.omg.org/technology/documents/idl2x_spec_catalog.htm
您不能说IDL是一种语言所尊重的标准。 IDL是一种高级别的表达方式,您可以手动地痛苦地做。您可以将它视为高级语言(如C)和低级语言(如汇编程序)之间的相同概念。编译器接受C代码并为目标体系结构创建汇编代码(x86,sparc,等等)。 类似地,CORBA供应商(不是编译器供应商)提供的解析IDL的工具会生成特定于语言的结果,允许您跳过编码无聊的CORBA低级别详细信息。
现在,我不知道COM世界是怎样的,但是作为COM的ripoff(或者我听说过),概念应该是相同的。
答案 3 :(得分:0)
可以编译IDL文件以产生一些有用的东西。
您可以获得带有接口和常量的头文件和C源文件,您可以使用这些接口和常量来实现应用程序中的接口,或者在其他实现中使用已实现的接口。
您还可以将IDL文件编译到类型库中,这本身就是一个非常有用的东西。您可以将类型库导入到不同的语言中以使用COM对象。您可以将类型库包含到COM服务器资源中,这可以为您提供自动编组功能,使您可以在进程内服务器中从进程内服务器中进行编写,而无需编写任何内容。如果COM服务器资源中有类型库,也可以使用ATL模板在COM服务器中进行后期绑定实现,而无需编写任何内容。