2012-02-05 14 views
3

では動作しないタイプIは、次のコードを持っている:は整数()キャストは、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

ポインタを使って作業していて、 "整数値"ではないことを示すPByteを使用する場合は+1してください。 –

+0

@Andreasですが、 'PColorRGB'に型変換を使うのは自然ではありませんか?私は 'Inc(PColorRGB(DestPixel)、DestDelta);' – TLama

+0

@tlamaを意味します。TColorRGBのサイズが1より大きい場合、別の意味を持ちます。 –

関連する問題