什么是IDL?

IDL是什么意思?我已经google了,它发现它代表接口定义语言,它用于组件的接口定义。但是,在实践中,IDL的目的是什么?微软是否使用它?
接口定义语言(IDL)用于在远程过程调用(RPC)中设置客户端和服务器之间的通信。这里有许多变化,如Sun RPC,ONC RPC,DCE RPC等。

基本上,您使用IDL来指定客户端和服务器之间的接口,以便RPC机制可以创建在网络上调用函数所需的代码存根。

RPC需要使用IDL信息为客户端和服务器创建存根函数。它非常类似于C中的函数原型,但最终结果略有不同,例如:

+----------------+
| Client         |
|  +----------+  |  +---------------+
|  |   main   |  |  | Server        |
|  |----------|  |  |  +----------+ |
|  | stub_cli |------->| stub_svr | |
|  +----------+  |  |  |----------| |
+----------------+  |  | function | |
                    |  +----------+ |
                    +---------------+

在这个例子中,main不是在同一个程序中调用函数,而是调用一个客户端存根函数(具有与函数相同的原型),该函数负责封装信息并将其通过线路传递到另一个进程。这可以是同一台机器或不同的机器,这并不重要–RPC的优点之一是能够随意移动服务器。

在服务器中,有一个“监听器”进程,将接收该信息并将其传递到服务器。服务器的存根接收信息,解包并将其传递给实际函数。

真正的函数然后做它需要并返回到服务器存根,它可以打包返回信息(返回码和任何[out]或[in,out]变量),并将它传递回客户端存根。

客户端存根然后解包,并将其传回主。

实际细节可能有所不同,但是解释应该足够好的概念概述。

实际的IDL可能看起来像:

[uuid(f9f6be21-fd32-5577-8f2d-0800132bd567),
    version(0),
    endpoint("ncadg_ip_udp:[1234]", "dds:[19]")]
interface function_iface {
    [idempotent] void function(
        [in] int handle,
        [out] int *status
    );
}

所有在顶部的东西基本上是网络信息,它的肉是在原型显示的接口部分内。这允许IDL编译器构建x stub和x服务器函数,用于编译和链接客户端和服务器代码以使RPC工作。

Microsoft确实使用IDL(我认为他们有一个MIDL编译器)COM的东西。我也使用第三方产品与MS操作系统,DCE和ONC RPC。

http://stackoverflow.com/questions/670630/what-is-idl

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:什么是IDL?