Различный вывод из midl.exe 6 и midl.exe 7 - PullRequest
1 голос
/ 05 декабря 2008

Я пытаюсь преобразовать проект 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 выводить те же прототипы сервера RPC, что и v6?

Ответы [ 2 ]

1 голос
/ 05 декабря 2008

Похоже, я могу ответить на свой вопрос ...

MIDL v6, по-видимому, автоматически устанавливает тип дескриптора по умолчанию auto_handle для прототипов сервера. MIDL v7 этого не делает, поэтому решение состоит в том, чтобы использовать файл Server.acl с настройкой auto_handle. В результате получается файл Server.h с прототипами функций, который одинаков между MIDL v6 и v7.

Однако, он также выводит предупреждение, указывающее, что "auto_handle" устарел. Вместо этого я использовал implicit_handle (handle_t IDL_handle).

Жаль, что этот сайт не дает мне значков за ответы на мои собственные вопросы. Также я не могу пометить свой собственный ответ как правильный.

0 голосов
/ 20 апреля 2011

handle_t IDL_handle для явного дескриптора привязки RPC. Со стороны сервера вы можете делать с ним классные вещи, такие как извлечение токена вызывающего клиента для олицетворения через различные функции RPC, но если вам не нужно его использовать, то можно просто установить его как параметр без ссылки (UNREFERENCED_PARAMETER (IDL_handle);). Кажется, что дескрипторы неявного связывания теперь устарели.

На стороне клиента вы используете дескриптор привязки, который вы получаете при привязке к серверу RPC для параметра IDL_handle.

...