midl.exe 6 和 midl.exe 7 的不同输出

Posted

技术标签:

【中文标题】midl.exe 6 和 midl.exe 7 的不同输出【英文标题】:Different output from midl.exe 6 and midl.exe 7 【发布时间】:2008-12-05 16:03:21 【问题描述】:

我很想将 MSVC 项目从 VS 2005 转换为 VS 2008。它包含一个 IDL 文件,该文件输出用于 RPC 的标头和存根。 VS 2005 项目使用 MIDL.exe 版本 6.00.0366。 VS 2008 项目使用 MIDL.exe 版本 7.00.0500。

问题出在这里:MIDL v6 输出以下原型供我在我的服务器代码中实现:

HRESULT PRC_Function(UINT input);

具有相同命令行的 MIDL v7 输出此原型:

HRESULT RPC_Function(handle_t IDL_handle, UINT input);

我不想将handle_t 参数添加到我现有的所有实现中。 (另外,我仍然需要用 VS 2005 编译一段时间。)

问题:如何让 MIDL.exe v7 输出与 v6 相同的 RPC 服务器原型?

【问题讨论】:

【参考方案1】:

看来我可以回答我自己的问题了……

MIDL v6 似乎自动将服务器原型的句柄类型默认为 auto_handle。 MIDL v7 没有,因此解决方案是使用其中包含 auto_handle 设置的 Server.acl 文件。这将输出一个 Server.h 文件,其函数原型在 MIDL v6 和 v7 之间是相同的。

但是,它也会输出一条警告,指出“auto_handle”已被贬值。相反,我使用了implicit_handle(handle_t IDL_handle)。

太糟糕了,这个网站没有给我徽章来回答我自己的问题。我也不能将自己的答案标记为正确答案。

【讨论】:

很少有人处理 RPC。我在这里发现的。 Charles - 我是少数使用 RPC 的人之一,我遇到的问题与您的类似,想知道您是否可以针对您的问题发表更多见解。我的问题是 MIDL v7 试图在同一服务的第二个接口中创建 Rundown 例程。 MIDL v5 不这样做...【参考方案2】:

handle_t IDL_handle 用于显式 RPC 绑定句柄。在服务器端,你可以用它做一些很酷的事情,比如通过各种 RPC 函数拉调用客户端的令牌以进行模拟,但如果你不需要使用它,只需将其设置为未引用参数(UNREFERENCED_PARAMETER (IDL_handle);)。似乎隐式绑定句柄现在已被弃用。

在客户端,您使用绑定到 RPC 服务器时获得的绑定句柄作为 IDL_handle 参数。

【讨论】:

以上是关于midl.exe 6 和 midl.exe 7 的不同输出的主要内容,如果未能解决你的问题,请参考以下文章

迁移到MSYS2 与 Qt 工具链注意的几个事情(注意链接顺序,并且人造mingw工具链所没有的局部midl.exe命令)

IDL 到类型库

未使用函数参数的编译器优化

带有 Python 2.7.6 和 Virtualenv 12.0.7 (OSX10,10.2) 的 Django 1.7.6 - 模板呈现模板语法错误

版本 6.1.5 和 7.6 之间的typo3-content 的兼容性

6月7月总结总结及7月规划