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.
Tópicos relacionados
-
regras de marshaling para user_marshal e wire_marshal