Extensiones rpc de Microsoft Binding-Handle
Las extensiones de Microsoft para el lenguaje IDL admiten varios parámetros de identificador que aparecen en posiciones distintas del primer parámetro, situado más a la izquierda. En los pasos siguientes se describe la secuencia a la que pasa el compilador MIDL para resolver el parámetro binding-handle en el modo de compatibilidad DCE (/osf) y en modo predeterminado (extendido por Microsoft).
Modo de compatibilidad con DCE
- Identificador de enlace que aparece en la primera posición.
- Parámetro [in, context_handle] situado más a la izquierda.
- Identificador de enlace implícito especificado por [implicit_handle] o [auto_handle].
- Si no hay ningún ACF presente, el valor predeterminado es el uso de [auto_handle].
Modo predeterminado
- Identificador de enlace explícito más a la izquierda.
- Identificador de enlace implícito especificado por [implicit_handle] o [auto_handle].
- Si no hay ningún ACF presente, el valor predeterminado es el uso de [auto_handle].
Los compiladores IDL de DCE buscan un identificador de enlace explícito como primer parámetro. Cuando el primer parámetro no es un identificador de enlace y se especifican uno o varios identificadores de contexto, el identificador de contexto más a la izquierda se usa como identificador de enlace. Cuando el primer parámetro no es un identificador y no hay identificadores de contexto, el procedimiento usa el enlace implícito mediante el atributo ACF [implicit_handle] o [auto_handle].
Las extensiones de Microsoft al IDL permiten que el identificador de enlace esté en una posición distinta del primer parámetro. El parámetro [in] explicit-handle más a la izquierda, ya sea un identificador primitivo, definido por el programador o un controlador de contexto, es el identificador de enlace. Cuando no hay parámetros de identificador, el procedimiento usa el enlace implícito mediante el atributo ACF [implicit_handle] o [auto_handle].
Las reglas siguientes se aplican tanto al modo de compatibilidad con DCE (/osf) como al modo predeterminado:
- El enlace de control automático se usa cuando no hay ningún ACF presente.
- Identificadores explícitos [in] o [in, out] para una función individual preempt cualquier enlace implícito especificado para la interfaz.
- No se admiten varios identificadores primitivos [in] o [in, out].
- Se permiten varios identificadores de contexto explícitos [in] o [in, out].
- Todos los parámetros de identificador definidos por el programador, excepto el parámetro binding-handle, se tratan como datos transmisibles.
La tabla siguiente contiene ejemplos y describe cómo se asignan los identificadores de enlace en cada modo de compilador.
Ejemplo | Descripción |
---|---|
|
No se especifica ningún identificador explícito. Se usa el identificador de enlace implícito, especificado por [ implicit_handle] o [ auto_handle]. Cuando no hay ningún controlador ACF, se usa un identificador automático. |
|
Se especifica un identificador explícito de tipo handle_t. El parámetro H es el identificador de enlace del procedimiento. |
|
El primer parámetro no es un identificador. En el modo predeterminado, el parámetro de identificador más a la izquierda, H, es el identificador de enlace. En el modo /osf, se usa el enlace implícito. Se notifica un error porque se espera que el segundo parámetro sea transmisible y handle_t no se pueda transmitir. |
|
El primer parámetro no es un identificador. En el modo predeterminado, el parámetro de identificador más a la izquierda, H, es el identificador de enlace. Los códigos auxiliares llaman a las rutinas proporcionadas por el usuario MY_HDL_bind y MY_HDL_unbind. En modo in/osf, se usa el enlace implícito. El parámetro de identificador definido por el programador H se trata como datos transmisibles. |
|
El primer parámetro es un identificador de enlace. El parámetro H es el parámetro binding-handle. El segundo parámetro de identificador definido por el programador se trata como datos transmisibles. |
|
El identificador de enlace es un identificador de contexto. El parámetro H es el identificador de enlace. |