Partilhar 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 você representa os dados. Às vezes, você pode simplificar o desenvolvimento convertendo dados em um formato que seu aplicativo possa manipular mais facilmente. Você pode alterar o formato de dados do seu aplicativo para que ele possa ser transmitido de forma mais eficiente pela rede.

Os atributos [transmit_as] e [represent_as] instruem o compilador a associar um tipo transmissível que o stub passa entre cliente e servidor, com um tipo de usuário que os aplicativos cliente e servidor usam. Você deve fornecer as rotinas que realizam 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 armazenar os dados convertidos. Usando o atributo [transmit_as] IDL ou o atributo [represent_as] ACF 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 forma como os dados da rede são apresentados à aplicação.

Os atributos [wire_marshal] e [user_marshal] são extensões da Microsoft para o OSF-DCE IDL. Sua sintaxe e funcionalidade são semelhantes às dos especificados pelo DCE [transmit_as] e [represent_as] atributos, respectivamente. A diferença é que, em vez de converter os dados de um tipo para outro, você organiza os dados diretamente. Para fazer isso, você deve fornecer as rotinas externas para dimensionar o buffer de dados nos lados do cliente e do servidor, empacotar e desempacotar 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 de notificação de falha na entrega a chamar essas rotinas externas quando necessário.

Os atributos [wire_marshal] e [user_marshal] tornam possível organizar tipos de dados que, de outra forma, não poderiam ser transmitidos através dos limites do processo. Além disso, como há menos sobrecarga associada à conversão de tipo, [wire_marshal] e [user_marshal] fornecer melhor desempenho em tempo de execução, quando comparado 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 notar que a implementação dos atributos [wire_marshal] e [user_marshal] deve seguir as regras de agrupamento ditadas por OSF-DCE especificação. Por esse motivo, o uso desses atributos não é recomendado se você não estiver familiarizado com o protocolo de fio. 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 desses atributos para MIDL, nos seguintes tópicos: