Extensões de Binding-Handle RPC da Microsoft
As extensões da Microsoft para a linguagem IDL suportam vários parâmetros de identificador que aparecem em posições diferentes do primeiro, mais à esquerda, parâmetro. As etapas a seguir descrevem a sequência pela qual o compilador MIDL passa para resolver o parâmetro binding-handle no modo de compatibilidade DCE (/osf) e no modo padrão (estendido pela Microsoft).
Modo de compatibilidade DCE
- Alça de vinculação que aparece na primeira posição.
- Mais à esquerda [em, context_handle] parâmetro.
- Alça de ligação implícita especificada por [implicit_handle] ou [auto_handle].
- Se nenhum ACF estiver presente, o uso padrão de [auto_handle].
Modo padrão
- Alça de vinculação explícita mais à esquerda.
- Alça de ligação implícita especificada por [implicit_handle] ou [auto_handle].
- Se nenhum ACF estiver presente, o uso padrão de [auto_handle].
Os compiladores IDL DCE procuram um identificador de ligação explícito como o primeiro parâmetro. Quando o primeiro parâmetro não é uma alça de vinculação e uma ou mais alças de contexto são especificadas, a alça de contexto mais à esquerda é usada como a alça de ligação. Quando o primeiro parâmetro não é um identificador e não há identificadores de contexto, o procedimento usa a ligação implícita usando o atributo ACF [implicit_handle] ou [auto_handle].
As extensões da Microsoft para o IDL permitem que o identificador de ligação esteja em uma posição diferente do primeiro parâmetro. O parâmetro [mais à esquerda em] explicit-handle – seja um identificador primitivo, definido pelo programador ou de contexto – é o identificador de ligação. Quando não há parâmetros de manipulação, o procedimento usa a ligação implícita usando o atributo ACF [implicit_handle] ou [auto_handle].
As seguintes regras aplicam-se ao modo de compatibilidade DCE (/osf) e ao modo padrão:
- A vinculação de identificador automático é usada quando nenhum ACF está presente.
- Identificadores explícitos [em] ou [em, fora] para uma função individual antecipam qualquer ligação implícita especificada para a interface.
- Não há suporte para várias alças primitivas [em] ou [em, out].
- São permitidos vários identificadores de contexto explícito [em] ou [em, out].
- Todos os parâmetros de identificador definidos pelo programador, exceto o parâmetro binding-handle, são tratados como dados transmissíveis.
A tabela a seguir contém exemplos e descreve como identificadores de associação são atribuídos em cada modo de compilador.
Exemplo | Descrição |
---|---|
|
Nenhum identificador explícito é especificado. A alça de ligação implícita, especificada por [ implicit_handle] ou [ auto_handle], é usada. Quando nenhum ACF está presente, um identificador automático é usado. |
|
Um identificador explícito do tipo handle_t é especificado. O parâmetro H é o identificador de ligação para o procedimento. |
|
O primeiro parâmetro não é uma alça. No modo padrão, o parâmetro de identificador mais à esquerda, H, é a alça de ligação. No modo /osf, a ligação implícita é usada. Um erro é relatado porque se espera que o segundo parâmetro seja transmissível e handle_t não pode ser transmitido. |
|
O primeiro parâmetro não é uma alça. No modo padrão, o parâmetro de identificador mais à esquerda, H, é a alça de ligação. Os stubs chamam as rotinas fornecidas pelo usuário de MY_HDL_bind e MY_HDL_unbind. No modo in/osf, a ligação implícita é usada. O parâmetro handle definido pelo programador H é tratado como dados transmissíveis. |
|
O primeiro parâmetro é um identificador de ligação. O parâmetro H é o parâmetro binding-handle. O segundo parâmetro identificador definido pelo programador é tratado como dados transmissíveis. |
|
O identificador de vinculação é um identificador de contexto. O parâmetro H é a alça de ligação. |