2012-02-05 3 views
3

У меня есть следующий фрагмент кода:Integer() типа не работает на Delphi 64-битных

inc(integer(DestPixel), DestDelta); //DestPixel: PColorRGB; DestDelta: integer; 

Это прекрасно работает на 32-битных платформах. Если изменить платформу для 64-битной в компилятор компилятор выдает эту ошибку:

E2064 Left side cannot be assigned to

Проблема, кажется, в integer() приведения типов. Как я могу исправить проблему?

+0

Является ли эта строка кода функцией JanFx.Stretch? Вам нужно будет использовать INT_PTR или NativeInt. – Ampere

ответ

7

На 64-битной платформе DestPixel имеет ширину 8 байтов, Integer - 4 байта, поэтому тип недействителен. Вы можете решить эту проблему, используя вместо этого NativeInt.

inc(NativeInt(DestPixel), DestDelta); 

NativeInt тип имеет тот же размер, как указатель и так плавает между 4 байта и 8 байт шириной в зависимости от выходной мишени.

Сказав это, я лично придумал бы с PByte, потому что это более правильно описывает операцию, которую вы выполняете.

inc(PByte(DestPixel), DestDelta); 
+2

+1 для использования PByte, который указывает, что вы работаете с указателями, а не «целые значения». –

+0

@Andreas, но не более естественно использовать typecast для 'PColorRGB'? Я имею в виду 'Inc (PColorRGB (DestPixel), DestDelta);' – TLama

+0

@tlama, который имел бы другой смысл, если бы TColorRGB имел размер больше 1 –

 Смежные вопросы

  • Нет связанных вопросов^_^