Extensões do Microsoft RPC Binding-Handle
As extensões da Microsoft para a linguagem IDL dão suporte a vários parâmetros de identificador que aparecem em posições diferentes do primeiro parâmetro mais à esquerda. As etapas a seguir descrevem a sequência pela qual o compilador MIDL passa para resolve o parâmetro binding-handle no modo de compatibilidade DCE (/osf) e no modo padrão (estendido pela Microsoft).
Modo de compatibilidade de DCE
- Identificador de associação que aparece na primeira posição.
- Parâmetro mais à esquerda [in, context_handle].
- Identificador de associação implícita especificado por [implicit_handle] ou [auto_handle].
- Se nenhum ACF estiver presente, o padrão será o uso de [auto_handle].
Modo padrão
- Identificador de associação explícita mais à esquerda.
- Identificador de associação implícita especificado por [implicit_handle] ou [auto_handle].
- Se nenhum ACF estiver presente, o padrão será o uso de [auto_handle].
Os compiladores de IDL de DCE procuram um identificador de associação explícito como o primeiro parâmetro. Quando o primeiro parâmetro não é um identificador de associação e um ou mais identificadores de contexto são especificados, o identificador de contexto mais à esquerda é usado como o identificador de associação. Quando o primeiro parâmetro não é um identificador e não há identificadores de contexto, o procedimento usa a associação implícita usando o atributo ACF [implicit_handle] ou [auto_handle].
As extensões da Microsoft para a IDL permitem que o identificador de associação esteja em uma posição diferente do primeiro parâmetro. O parâmetro de identificador explícito [in] mais à esquerda, seja um identificador primitivo, definido pelo programador ou de contexto, é o identificador de associação. Quando não há parâmetros de identificador, o procedimento usa a associação implícita usando o atributo ACF [implicit_handle] ou [auto_handle].
As regras a seguir se aplicam ao modo de compatibilidade de DCE (/osf) e ao modo padrão:
- A associação de identificador automático é usada quando nenhum ACF está presente.
- Os identificadores [in] ou [in, out] explícitos para uma função individual preempõem qualquer associação implícita especificada para a interface.
- Não há suporte para vários identificadores primitivos [in] ou [in, out].
- Vários identificadores de contexto explícitos [in] ou [in, out] são permitidos.
- 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 os identificadores de associação são atribuídos em cada modo de compilador.
Exemplo | Descrição |
---|---|
|
Nenhum identificador explícito é especificado. O identificador de associação implícita, especificado por [ implicit_handle] ou [ auto_handle], é usado. 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 associação do procedimento. |
|
O primeiro parâmetro não é um identificador. No modo padrão, o parâmetro de identificador mais à esquerda, H, é o identificador de associação. No modo /osf, a associação implícita é usada. Um erro é relatado porque espera-se que o segundo parâmetro seja transmissível e handle_t não possa ser transmitido. |
|
O primeiro parâmetro não é um identificador. No modo padrão, o parâmetro de identificador mais à esquerda, H, é o identificador de associação. Os stubs chamam as rotinas fornecidas pelo usuário MY_HDL_bind e MY_HDL_unbind. No modo/osf, a associação implícita é usada. O parâmetro de identificador definido pelo programador H é tratado como dados transmissíveis. |
|
O primeiro parâmetro é um identificador de associação. O parâmetro H é o parâmetro binding-handle. O segundo parâmetro de identificador definido pelo programador é tratado como dados transmissíveis. |
|
O identificador de associação é um identificador de contexto. O parâmetro H é o identificador de associação. |