gpt4 book ai didi

idl - 什么是IDL?

转载 作者:行者123 更新时间:2023-12-02 03:06:02 29 4
gpt4 key购买 nike

IDL是什么意思?我用谷歌搜索了一下,发现它代表接口(interface)定义语言,用于组件的接口(interface)定义。但是,在实践中,IDL 的目的是什么?微软使用它吗?

最佳答案

接口(interface)定义语言(IDL)用于在远程过程调用(RPC)中建立客户端和服务器之间的通信。它有很多变体,例如 Sun RPC、ONC RPC、DCE RPC 等。

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

RPC 需要使用 IDL 信息为客户端和服务器创建 stub 函数。它与 C 中的函数原型(prototype)非常相似,但最终结果略有不同,如下图所示:

+----------------+
| Client |
| +----------+ | +---------------+
| | main | | | Server |
| |----------| | | +----------+ |
| | stub_cli |----(comms)--->| stub_svr | |
| +----------+ | | |----------| |
+----------------+ | | function | |
| +----------+ |
+---------------+

在此示例中,main 没有在同一程序中调用 function,而是调用客户端 stub 函数(与 function 具有相同的原型(prototype)) )它负责打包信息并通过通信 channel 将其传输到另一个进程。

这可以是同一台机器,也可以是不同的机器,这并不重要 - RPC 的优点之一就是能够随意移动服务器。

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

然后,真正的函数执行所需的操作并返回到服务器 stub ,该 stub 可以打包返回信息(返回代码和任何 [out][in,out] 变量)并将其传递回客户端 stub 。

然后客户端 stub 将其解压并将其传递回main

实际细节可能略有不同,但该解释对于概念性概述来说应该足够了。

实际的 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
);
}

顶部的所有信息(例如,uuidendpoint)基本上都是用于连接客户端和服务器的网络信息。它的“核心”位于显示原型(prototype)的界面部分。这允许 IDL 编译器构建 function 客户端和服务器 stub 函数,用于编译和链接客户端和服务器代码以使 RPC 正常工作。

Microsoft 确实使用 IDL(我认为他们有一个 MIDL 编译器)来处理 COM 内容。我还使用过带有 MS 操作系统的第三方产品,包括 DCE 和 ONC RPC。

关于idl - 什么是IDL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/670630/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com