Partilhar via


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
void proc1( void );
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.
void proc2([in] handle_t H,           [in] short s );
Um identificador explícito do tipo handle_t é especificado. O parâmetro H é o identificador de ligação para o procedimento.
void proc3([in] short s,           [in] handle_t H );
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.
typedef [handle] short * MY_HDL;void proc1([in] short s,           [in] MY_HDL H );
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.
Typedef [handle] short * MY_HDL;void proc1([in] MY_HDL H,            [in] MY_HDL p );
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.
Typedef [context_handle] void * CTXT_HDL;void proc1([in] short s,           [in] long l,           [in] CTXT_HDL H ,           [in] char c);
O identificador de vinculação é um identificador de contexto. O parâmetro H é a alça de ligação.