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

时间:2008-12-05 16:03:22

标签: visual-c++ rpc midl

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

2 个答案:

答案 0 :(得分:1)

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

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

但是,它还会输出一个警告,指示“auto_handle”已折旧。相反,我使用了implicit_handle(handle_t IDL_handle)。

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

答案 1 :(得分:0)

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

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