Расширения Binding-Handle Microsoft RPC
Расширения Майкрософт для языка IDL поддерживают несколько параметров дескриптора, которые отображаются в позициях, отличных от первого, крайнего левого параметра. Ниже описана последовательность, которую выполняет компилятор MIDL для разрешения параметра binding-handle в режиме совместимости DCE (/osf) и в режиме по умолчанию (microsoft-extended).
Режим совместимости DCE
- Дескриптор привязки, который отображается в первой позиции.
- Самый левый параметр [in, context_handle].
- Неявный дескриптор привязки, заданный параметром [implicit_handle] или [auto_handle].
- Если ACF отсутствует, по умолчанию используется [auto_handle].
Режим по умолчанию
- Самый левый явный дескриптор привязки.
- Неявный дескриптор привязки, заданный параметром [implicit_handle] или [auto_handle].
- Если ACF отсутствует, по умолчанию используется [auto_handle].
Компиляторы IDL DCE ищут явный дескриптор привязки в качестве первого параметра. Если первый параметр не является дескриптором привязки и указан один или несколько дескрипторов контекста, в качестве дескриптора привязки используется крайний левый дескриптор контекста. Если первый параметр не является дескриптором и нет дескрипторов контекста, процедура использует неявную привязку с помощью атрибута ACF [implicit_handle] или [auto_handle].
Расширения Майкрософт для IDL позволяют дескриптору привязки находиться в позиции, отличной от первого параметра. Самый левый параметр [in] явного дескриптора , будь то примитивный, определенный программистом или контекстный дескриптор, является дескриптором привязки. Если параметры дескриптора отсутствуют, процедура использует неявную привязку с помощью атрибута ACF [implicit_handle] или [auto_handle].
Следующие правила применяются как к режиму совместимости DCE (/osf), так и к режиму по умолчанию.
- Привязка автоматической обработки используется, если ACF отсутствует.
- Явные дескриптора [in] или [in, out] для отдельной функции вытесняют любую неявную привязку, указанную для интерфейса.
- Несколько примитивных дескрипторов [in] или [in, out] не поддерживаются.
- Допускается несколько явных дескрипторов контекста [in] или [in, out].
- Все заданные программистом параметры дескриптора, за исключением параметра binding-handle, обрабатываются как передаваемые данные.
В следующей таблице приведены примеры и описано назначение дескрипторов привязки в каждом режиме компилятора.
Пример | Описание |
---|---|
|
Явный дескриптор не указан. Используется неявный дескриптор привязки, заданный [ implicit_handle] или [ auto_handle]. Если ACF отсутствует, используется автоматический дескриптор. |
|
Указан явный дескриптор типа handle_t. Параметр H является дескриптором привязки для процедуры. |
|
Первый параметр не является дескриптором. В режиме по умолчанию самый левый параметр дескриптора H является дескриптором привязки. В режиме /osf используется неявная привязка. Сообщается об ошибке, так как ожидается, что второй параметр будет передаваться, а передача handle_t невозможна. |
|
Первый параметр не является дескриптором. В режиме по умолчанию самый левый параметр дескриптора H является дескриптором привязки. Заглушки вызывают пользовательские подпрограммы MY_HDL_bind и MY_HDL_unbind. В режиме osf используется неявная привязка. Заданный программистом параметр дескриптора H обрабатывается как передаваемые данные. |
|
Первый параметр — это дескриптор привязки. Параметр H является параметром binding-handle. Второй параметр дескриптора, определяемый программистом, обрабатывается как передаваемые данные. |
|
Дескриптор привязки является дескриптором контекста. Параметр H является дескриптором привязки. |