Share via


Representação de dados

Os ambientes de computação podem diferir significativamente, assim como as arquiteturas de rede. Para acomodar essas diferenças, o MIDL permite que você modifique a maneira como representa os dados. Às vezes, você pode simplificar o desenvolvimento convertendo dados em um formato que seu aplicativo pode lidar com mais facilidade. Você pode alterar o formato de dados do aplicativo para que ele possa ser transmitido com mais eficiência pela rede.

Os atributos [transmit_as] e [represent_as] instruem o compilador a associar um tipo transmissível que o stub passa entre o cliente e o servidor, com um tipo de usuário que os aplicativos cliente e servidor usam. Você deve fornecer as rotinas que executam a conversão entre o tipo de usuário e o tipo transmissível e as rotinas para liberar a memória que foi usada para manter os dados convertidos. Usar o atributo IDL [transmit_as] ou o atributo ACF [represent_as] instrui o stub a chamar essas rotinas de conversão antes e depois da transmissão. O atributo [transmit_as] permite converter um tipo de dados em outro tipo de dados para transmissão pela rede. O atributo [represent_as] permite controlar a maneira como os dados da rede são apresentados ao aplicativo.

Os atributos [wire_marshal] e [user_marshal] são extensões da Microsoft para o IDL do OSF-DCE. Sua sintaxe e funcionalidade são semelhantes à dos atributos [transmit_as] e [represent_as] especificados pelo DCE, respectivamente. A diferença é que, em vez de converter os dados de um tipo para outro, faça marshaling dos dados diretamente. Para fazer isso, você deve fornecer as rotinas externas para dimensionar o buffer de dados nos lados do cliente e do servidor, realizar marshaling e desmarcar os dados nos lados do cliente e do servidor e liberar os dados no lado do servidor. O compilador MIDL gera códigos de formato que instruem o mecanismo NDR a chamar essas rotinas externas quando necessário.

Os atributos [wire_marshal] e [user_marshal] possibilitam realizar marshaling de tipos de dados que, de outra forma, não poderiam ser transmitidos entre os limites do processo. Além disso, como há menos sobrecarga associada à conversão de tipo, [wire_marshal] e [user_marshal] fornecem melhor desempenho em tempo de execução, quando comparados com [transmit_as] e [represent_as]. Os atributos [wire_marshal] e [user_marshal] são mutuamente exclusivos entre si e em relação aos atributos [transmit_as] e [represent_as] para um determinado tipo.

É importante observar que a implementação dos atributos [wire_marshal] e [user_marshal] deve seguir as regras de marshalling ditadas pela especificação OSF-DCE. Por esse motivo, o uso desses atributos não será recomendado se você não estiver familiarizado com o protocolo de transmissão. Mais informações sobre a Transferência de Sintaxe NDR podem ser encontradas em www.opengroup.org.

Esta seção fornece uma breve visão geral deles para atributos MIDL, nos seguintes tópicos: