midl.exe 6 和 midl.exe 7 的不同输出
我正在尝试将 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 服务器原型?
I'm tyring to convert a MSVC project from VS 2005 to VS 2008. It contains a IDL file that outputs a header and stubs used for RPC. The VS 2005 project uses MIDL.exe version 6.00.0366. The VS 2008 project uses MIDL.exe version 7.00.0500.
Here's the problem: MIDL v6 outputs the following prototype for me to implement in my server code:
HRESULT PRC_Function(UINT input);
MIDL v7 with the same command line outputs this prototype:
HRESULT RPC_Function(handle_t IDL_handle, UINT input);
I don't want to have to go through and add the handle_t parameter to all my existing implementations. (Plus I still need the implementations to compile with VS 2005 for a while longer.)
Question: How can I get MIDL.exe v7 to output the same RPC server prototypes as v6?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
看起来我可以回答我自己的问题...
MIDL v6 似乎自动将服务器原型的句柄类型默认为 auto_handle。 MIDL v7 没有,因此解决方案是使用其中包含 auto_handle 设置的 Server.acl 文件。 这会输出一个 Server.h 文件,其函数原型在 MIDL v6 和 v7 之间是相同的。
但是,它还会输出一条警告,指示“auto_handle”已被折旧。 相反,我使用implicit_handle(handle_t IDL_handle)。
太糟糕了,这个网站没有给我回答我自己的问题的徽章。 我也不能将自己的答案标记为正确答案。
Looks like I can answer my own question...
MIDL v6 appears to automatically default the handle type to auto_handle for the server prototypes. MIDL v7 does not, so the solution is to use a Server.acl file with the auto_handle setting in it. This outputs a Server.h file with function prototypes that is the same between MIDL v6 and v7.
However, it also outputs a warning indicating that "auto_handle" has been depreciated. Instead I used implicit_handle(handle_t IDL_handle).
Too bad this site doesn't give me badges for answering my own questions. Nor can I flag my own answer as the correct answer.
handle_t IDL_handle 用于显式 RPC 绑定句柄。 在服务器端,您可以用它做一些很酷的事情,例如通过各种 RPC 函数拉取调用客户端的令牌以进行模拟,但是如果您不需要使用它,则可以将其设置为未引用的参数(UNREFERENCED_PARAMETER) (IDL_句柄);)。 似乎隐式绑定句柄现在已被弃用。
在客户端,您可以使用绑定到 RPC 服务器时获得的绑定句柄作为 IDL_handle 参数。
The handle_t IDL_handle is for the explicit RPC binding handle. On the server side, you can do cool stuff with it like pull the calling client's token for impersonation through the various RPC functions, but if you don't need to use it, it is fine to just set it as an unreferenced parameter (UNREFERENCED_PARAMETER(IDL_handle);). It seems like implicit binding handles are deprecated now.
On the client side, you use the binding handle you get when you bind to the RPC server for the IDL_handle parameter.