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


Хранение 64-разрядного значения

Чтобы сохранить 64-разрядное значение указателя, используйте ULONG_PTR. Значение ULONG_PTR равно 32 битам при компиляции с помощью 32-разрядного компилятора и 64 бита при компиляции с помощью 64-разрядного компилятора.

В следующих примерах используется реальный код, перенесенный в 64-разрядную версию Windows. Комментарий к шагам по настройке 64-разрядной совместимости кода.

Пример 1. Получение адреса

В следующем коде показан переносимый способ получения адреса.

Метод Результат
Использование ULONG (32-разрядный метод)
ULONG getAnAddress( )Int *somePointerReturn( (ULONG) somePointer );
Использование ULONG_PTR (переносимого метода)
ULONG_PTR getAnAddress( )Int *somePointerReturn( (ULONG_PTR) somePointer );

 

Пример 2. Вычисление адреса

В следующем коде показан переносимый способ вычисления адреса.

Метод Результат
Использование ULONG (32-разрядный метод)
Int *somePointer;Int *someOtherPointer;somePointer = (int *)( (ULONG)someOtherPointer + 0x20 );
Использование ULONG_PTR (переносимого метода)
Int *somePointer;Int *someOtherPointer;somePointer = (int *)( (ULONG_PTR)someOtherPointer + 0x20 );