【问题标题】:Integer() type cast doesn't work on Delphi 64-bitInteger() 类型转换在 Delphi 64 位上不起作用
【发布时间】:2012-02-27 09:37:57
【问题描述】:

我有以下代码:

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

这在 32 位平台上运行良好。如果我在编译器中将平台更改为 64 位,编译器会发出此错误:

E2064 左侧不能分配给

问题似乎出在integer() 类型转换中。我该如何解决这个问题?

【问题讨论】:

  • 这行代码是来自 JanFx.Stretch 函数吗?您必须使用 INT_PTR 或 NativeInt。

标签: delphi 64-bit integer delphi-xe2 typecast-operator


【解决方案1】:

在 64 位平台上,DestPixel 为 8 字节宽,Integer 为 4 字节,因此类型转换无效。您可以改用NativeInt 来解决此问题。

inc(NativeInt(DestPixel), DestDelta);

NativeInt 类型与指针大小相同,因此根据输出目标在 4 字节和 8 字节之间浮动。

话虽如此,我个人会使用PByte 进行类型转换,因为这更准确地描述了您正在执行的操作。

inc(PByte(DestPixel), DestDelta);

【讨论】:

  • +1 用于使用 PByte,这表明您正在使用指针而不是“整数值”。
  • @Andreas,但使用类型转换为PColorRGB 不是更自然吗?我的意思是Inc(PColorRGB(DestPixel), DestDelta);
  • @tlama 如果 TColorRGB 的大小大于 1,则具有不同的含义
  • 在使用指针运算时,可以省略Inc()的第二个参数,将一项作为时间推进。编译器将确定要前进的正确字节数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-01-24
  • 2011-11-22
  • 1970-01-01
  • 2012-09-22
  • 1970-01-01
  • 2021-09-03
  • 1970-01-01
相关资源
最近更新 更多