什么是IDL?

2024-04-16

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


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

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

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

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

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

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

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

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

然后客户端存根将其解压并将其传回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
    );
}

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

什么是IDL? 的相关文章

随机推荐

  • Spark SQL 广播哈希连接

    我正在尝试使用 SparkSQL 对数据帧执行广播哈希连接记录在这里 https spark apache org docs latest sql performance tuning html join strategy hints fo
  • 使用参考访问地图[重复]

    这个问题在这里已经有答案了 我尝试循环遍历地图 将其作为指向函数的指针传递 但我找不到访问元素的方法 这是代码 func refreshSession sessions map string Session now time Now for
  • Gradle 任务未显示在 Android Studio 4.2 的 gradle 工具窗口中

    我刚刚将 Android Studio 更新到版本 4 2 我很惊讶在我的项目中没有看到 Gradle 任务 在之前的版本 4 1 3 中 我可以看到如下所示的任务 但现在我只看到4 2版本中的依赖项 我尝试清除 Android Studi
  • 通过phpmailer批量发送邮件

    我正在使用 phpmailer 向我的订阅者发送批量电子邮件 但我面临一个可怕的问题 即当我向订阅者发送电子邮件时 每个订阅者都会多次收到相同的电子邮件 有些人获得了 4 次 有些人获得了 14 次 我正在通过 Mysql 表获取 flag
  • 如何确定用户在 JavaScript 中运行的是哪个版本的 IE?

    在一些现有代码中 有一个测试 通过检查对象 Browser Engine trident 是否已定义并返回 true 来查看用户是否正在运行 IE 但如何确定用户运行的是 IE6 或更早版本 还是 IE7 或更早版本 JavaScript
  • 如何在 MaterialButton 或 RaisingButton 上应用主题?

    有人可以帮助指出我们如何定义按钮的基本主题并在每个按钮上使用它吗 我到处寻找才发现textTheme但不是buttonTheme例子 Even on buttonTheme我们如何定义文本颜色 因为在按钮本身上我们可以直接这样做color
  • ASP.Net Core 从另一个控制器调用一个控制器

    在我的 ASP Net Core MVC 6 解决方案中 我有两组控制器 一组包含具有常规视图的网页 另一组包含 API 控制器 为了避免重复数据库逻辑 Web 控制器使用 API 控制器 目前 我正在通过将 DbContext 作为构造函
  • jQuery:多次淡入淡出div

    我在页面顶部有一个 div 我想淡入和淡出 3 次 我已经找到了一个问题 答案 它展示了如何通过将淡入淡出效果放入调用自身的函数中来进行无限循环淡入淡出 但我想知道指定有限数量的淡入淡出周期的最佳方法是什么 到目前为止 这就是我所拥有的 从
  • 资源调度问题

    我正在开发一个摩托车租赁网站 我遇到的问题是如何高效地解决为客人分配摩托车的问题 我知道如何以 愚蠢 的方式做到这一点 但我想知道是否有一种经典算法可以解决此类问题 这与将客人分配到酒店房间是同样的问题 在最后一个示例中 目标是通过不因调度
  • UIActionSheet 着色

    有人知道如何在 uikit 中为 uiactionsheet 着色吗 是的 因为它是一个 UIView 如 kmit 所描述的 您可以使用以下命令 addSubview 因此您可以添加自己的背景并使用 sendSubviewToBack 将
  • 在 JavaScript 中将字符串数组拆分为浮点数数组

    我正在尝试拆分一个称为 顶点 的字符串数组 并将其存储为浮点数组 目前字符串数组包含三个元素 0 1 0 1 1 0 1 1 0 我需要的是一个包含所有这些数字作为单独元素的浮点数组 0 1 0 1 1 0 1 1 0 我使用 split
  • 如何使用键盘快捷键打开弹出窗口? [复制]

    这个问题在这里已经有答案了 可能的重复 jQuery 的键盘快捷键 https stackoverflow com questions 593602 keyboard shortcuts with jquery 我想使用快捷键显示弹出窗口
  • 如何将自定义目标文件与 Haskell 库链接?

    我创建了一个 Haskell 包 它对 CUDA 代码中定义的函数进行 FFI 调用 我想在包构建期间将 cu 文件编译为对象 o 文件 并强制链接器将其链接 到目前为止 我尝试使用一种发现的技术这个问题 https stackoverfl
  • 使用plotly r 的多折线图

    我有一个数据框 我试图使用plotly作为多折线图来绘制它 下面是数据框的样子 Month considered pct x pct y pct
  • 如何阻止 VSCode 自动格式化删除括号内的空格?

    例如 当我写 foo bar 它将被格式化为 foo bar 我怎样才能让它保留2个空格 Edit 这是一个不同的问题如何更改 Visual Studio Code 中的缩进 https stackoverflow com question
  • 为什么在比较时将常量放在变量之前?

    我注意到我们的一些代码中存在以下语法有一段时间了 if NULL var or if 0 var 和类似的事情 有人可以解释一下为什么写这个的人选择这个符号而不是常见的符号var 0 way 这是风格问题 还是以某种方式影响性能 这是一种避
  • 为什么我在此语音识别代码中缺少 an4-1-1.match 文件?

    我在语音识别的解码部分遇到问题 我按照步骤操作here http www speech cs cmu edu sphinx tutorial html 当我输入 perl scripts pl decode slave pl 我收到这些错误
  • AWS从EBS切换到EFS

    我正在考虑从 AWS Elastic Block Storage 切换到 AWS Elastic Filesystem 主要是为了易于扩展 而且可共享存储似乎也不错 目前我有一个 debian EC2 实例和一个 EBS 卷 将数据从 EB
  • Python 中丢弃图像时出现内存泄漏

    我目前正在用 Python 编写一个简单的棋盘游戏 我刚刚意识到当图像重新加载时 垃圾收集不会从内存中清除丢弃的位图数据 仅当游戏启动或加载或分辨率更改时才会发生这种情况 但它会增加消耗的内存 所以我不能让这个问题得到解决 重新加载图像时
  • 什么是IDL?

    IDL 是什么意思 我用谷歌搜索了一下 发现它代表接口定义语言 用于组件的接口定义 但是 在实践中 IDL 的目的是什么 微软使用它吗 接口定义语言 IDL 用于在远程过程调用 RPC 中建立客户端和服务器之间的通信 它有很多变体 例如 S