2008-12-05 7 views
1

Я использую tyring для преобразования проекта MSVC с VS 2005 на VS 2008. Он содержит файл IDL, который выводит заголовок и заглушки, используемые для RPC. Проект VS 2005 использует версию MIDL.exe 6.00.0366. Проект VS 2008 использует версию MIDL.exe 7.00.0500.Различные выходные данные из midl.exe 6 и midl.exe 7

Вот проблема: 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?

ответ

1

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

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

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

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

+0

Немногие люди обрабатывают RPC. Я обнаружил это здесь. – lsalamon 2009-01-29 16:13:49

0

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

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