O atributo user_marshal
O atributo [ user_marshal] é um atributo de tipo ACF semelhante na sintaxe a [ represent_as]. Assim como acontece com o atributo IDL, [ wire_marshal], ele oferece uma maneira mais eficiente de realizar marshaling de dados em uma rede. Como um atributo ACF, [user_marshal] permite realizar 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 restrição main é 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 compatível. Como alternativa, você pode definir um ponteiro para o tipo alterável.
Assim como acontece com o atributo [wire_marshal] , você fornece rotinas para dimensionamento, marshaling, unmarshaling e liberação de passes. 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 [user_marshal] .
Rotina | Descrição |
---|---|
<tipo>_UserSize | Dimensiona o buffer de dados RPC antes de realizar marshaling no lado do cliente ou do servidor. |
<tipo>_UserMarshal | Realiza 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 [ in] apenas, o cliente transmitirá para o servidor. O cliente precisa das <funções type>_UserSize e <type>_UserMarshal . O servidor precisa das <funções type>_UserUnmarshal e <type>_UserFree .
Para um parâmetro [ out]-only, o servidor transmite para o cliente. O servidor precisa das <funções type>_UserSize e <type>_UserMarshal , enquanto o cliente precisa da <função type>_UserMarshal .
Tópicos relacionados