Compartilhar via


O atributo user_marshal

O atributo [ user_marshal] é um atributo do tipo ACF semelhante na sintaxe a [ represent_as]. Assim como acontece com o atributo IDL, [ wire_marshal], ele oferece uma maneira mais eficiente de fazer marshaling de dados em uma rede. Como um atributo ACF, [user_marshal] permite fazer marshaling de tipos de dados personalizados desconhecidos para MIDL. Cada tipo específico do aplicativo tem um tipo de transmissão correspondente que define a representação de transmissão.

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.

Assim como acontece com o atributo [wire_marshal], você fornece rotinas para o dimensionamento, marshaling, unmarshaling e passes livres. A tabela a seguir descreve os quatro nomes de rotina fornecidos pelo usuário. O tipo <> é o tipo userm- especificado na definição de tipo [user_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 usuário 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 <>_UserUnmarshal e <funções de tipo>_UserFree.

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 wire_marshal

regras de marshaling para marshaling de usuário e wire_marshal

user_marshal

wire_marshal

NdrGetUserMarshalInfo