1

我很想将 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 服务器原型?

4

2 回答 2

1

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

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

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

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

于 2008-12-05T17:00:32.470 回答
0

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

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

于 2011-04-19T22:57:25.647 回答