Condividi tramite


Evitare polimorfismo

I nuovi tipi di dati includono due tipi polimorfici, INT_PTR e LONG_PTR. In Windows a 32 bit, il INT_PTR esegue il mapping a int e l'LONG_PTR esegue il mapping a lungo. In Windows a 64 bit entrambi i tipi vengono mappati al tipo intrinseco __int64 . Il compilatore MIDL supporta questi tipi per le chiamate di routine remote, ma è necessario tenere presente una limitazione intrinseca quando li si usa in un ambiente distribuito. Assicurarsi di commentare di conseguenza il codice.

Indipendentemente dalle dimensioni della piattaforma, le dimensioni del filo di questi tipi polimorfici sono sempre a 32 bit. Quando si annulla ilmarshaling in Windows a 64 bit, il segno della libreria run-time estende i valori firmati e assegna zero ai byte di ordine elevato per un valore senza segno. Quando si inserisce un valore a 64 bit sul filo, il tempo di esecuzione tronca i byte di ordine elevato. Pertanto, solo i valori a 32 bit di basso ordine sono utilizzabili.

Usare i tipi polimorfi solo quando necessario per la conversione. Per le nuove interfacce, usare i tipi di intero intrinseco MIDL __int32 e __int64 oppure usare un tipo di puntatore o un handle di contesto, che tuttavia è più appropriato per il tipo di dati trasferiti.

Il compilatore a 64 bit supporta una nuova __int3264 intrinseca polimorfica. Anche in questo caso, questo tipo è stato sviluppato per supportare gli sforzi di conversione, in questo caso per supportare i tipi UINT_PTR in modo trasparente. Un altro elemento intrinseco, __long3264, supporterà il tipo di ULONG_PTR . Non usare direttamente __int3264 ; usare il tipo di INT_PTR quando è necessario un tipo polimorfico per motivi di conversione.