Share via


Evitando polimorfismo

Os novos tipos de dados incluem dois tipos polimórficos, INT_PTR e LONG_PTR. No Windows de 32 bits, o INT_PTR é mapeado para int e o LONG_PTR é mapeado para long. No Windows de 64 bits, ambos os tipos são mapeados para o tipo intrínseco __int64 . O compilador MIDL dá suporte a esses tipos para chamadas de procedimento remoto, mas há uma limitação inerente que você deve ter em mente ao usá-los em um ambiente distribuído. Certifique-se de comentar seu código adequadamente.

Independentemente do tamanho da plataforma, o tamanho do fio desses tipos polimórficos é sempre de 32 bits. Ao cancelar a gravação no Windows de 64 bits, o sinal de biblioteca em tempo de execução estende os valores assinados e atribui zero aos bytes de alta ordem para um valor não assinado. Ao colocar um valor de 64 bits na transmissão, o tempo de execução trunca os bytes de alta ordem. Portanto, somente os valores de 32 bits de ordem baixa são utilizáveis.

Use os tipos polimórficos somente quando necessário para portabilidade. Para novas interfaces, use os tipos inteiros intrínsecos MIDL __int32 e __int64 ou use um tipo de ponteiro ou identificador de contexto, o que for mais apropriado para o tipo de dados que está sendo transferido.

O compilador de 64 bits dá suporte a um novo __int3264 intrínseco polimórfico. Novamente, esse tipo foi desenvolvido para dar suporte aos esforços de portabilidade, nesse caso, para dar suporte aos tipos de UINT_PTR de forma transparente. (Outro tipo intrínseco, __long3264, dará suporte ao tipo ULONG_PTR .) Não use __int3264 diretamente; use o tipo INT_PTR quando precisar de um tipo polimórfico por motivos de portabilidade.