Compartilhar via


O atributo wire_marshal

O atributo [ wire_marshal] é um atributo do tipo IDL semelhante na sintaxe a [ transmit_as], mas fornecendo uma maneira mais eficiente de fazer marshaling de dados em uma rede.

Use o atributo [wire_marshal] para especificar um tipo de dados que será transmitido no lugar do tipo de dados específico do aplicativo. Cada tipo específico do aplicativo tem um tipo de transmissão correspondente que define a representação de transmissão (a representação usada na rede). O tipo específico do aplicativo não precisa ser transmitível, mas deve ser um tipo que MIDL reconhece. Para fazer marshaling de um tipo desconhecido para MIDL, use o atributo ACF [ user_marshal].

O tipo específico do aplicativo pode ser um tipo simples, composto ou ponteiro. A principal restrição é que a instância de tipo deve ter um tamanho de memória fixo e bem definido. Se o tamanho da instância de tipo precisar ser alterado, use um campo de ponteiro em vez de uma matriz de conformidade. Como alternativa, você pode definir um ponteiro para o tipo alterável.

Você deve fornecer as rotinas de dimensionamento, marshaling e desmarcação dos dados, além de liberar a memória associada. A tabela a seguir descreve os quatro nomes de rotina fornecidos pelo usuário. O tipo <> é o tipo de usuário especificado na definição de tipo [wire_marshal].

Rotina Descrição
<tipo>_UserSize Dimensiona o buffer de dados RPC antes de fazer marshaling no lado do cliente ou do servidor.
<tipo>_UserMarshal Faz marshaling dos dados no lado do cliente ou do servidor.
<tipo>_UserUnmarshal Desmarca os dados no lado do cliente ou do servidor.
<tipo>_UserFree Libera os dados no lado do servidor.

 

Essas rotinas fornecidas pelo programador são fornecidas pelo cliente ou pelo aplicativo de servidor com base nos atributos direcionais.

Se o parâmetro for [ apenas em], o cliente transmitirá para o servidor. O cliente precisa do tipo <>_UserSize e <funções de tipo>_UserMarshal. O servidor precisa do tipo <>_UserUnmarshale <tipo>_UserFree funções.

Para um parâmetro [ ]-only, o servidor transmite para o cliente. O servidor precisa do tipo <>_UserSize e <funções de tipo>_UserMarshal, enquanto o cliente precisa do tipo <>_UserMarshal função.

o atributo user_marshal

regras de marshaling para user_marshal e wire_marshal

wire_marshal

user_marshal

NdrGetUserMarshalInfo