Поделиться через


Избегание полиморфизма

Новые типы данных включают два полиморфных типа: INT_PTR и LONG_PTR. В 32-разрядной версии Windows INT_PTR сопоставляется с int , а LONG_PTR — с long. В 64-разрядной версии Windows оба типа сопоставляют с __int64 встроенным типом. Компилятор MIDL поддерживает эти типы для удаленных вызовов процедур, но при их использовании в распределенной среде необходимо помнить о присущем ограничении. Не забудьте закомментировать код соответствующим образом.

Независимо от размера платформы, размер провода этих полиморфных типов всегда составляет 32 бита. При распаковке в 64-разрядной версии Windows знак библиотеки времени выполнения расширяет подписанные значения и присваивает ноль байтам высокого порядка для неподписаемого значения. При установке 64-разрядного значения в проводе время выполнения усекает байты высокого порядка. Таким образом, можно использовать только 32-разрядные значения низкого порядка.

Используйте полиморфные типы, только если это необходимо для переноса. Для новых интерфейсов используйте встроенные целочисленные типы MIDL __int32 и __int64 либо тип указателя или дескриптор контекста, в зависимости от того, какой тип данных наиболее подходит для типа передаваемых данных.

64-разрядный компилятор поддерживает новые встроенные полиморфные __int3264. Опять же, этот тип был разработан для поддержки переноса, в данном случае для прозрачной поддержки типов UINT_PTR . (Другая встроенная функция, __long3264, будет поддерживать тип ULONG_PTR .) Не используйте __int3264 напрямую; Используйте тип INT_PTR , если для переноса требуется полиморфный тип.