- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用组件标记(NativeInt)值的分配,将其添加到字节集中。该程序在针对 WIN32 进行编译时可以正常工作,但无法针对 WINx64 进行编译。 (需要错误 2001 序数类型)这是一个 MCVE:
program Project1;
{$APPTYPE CONSOLE}
{$R *.res}
uses
System.SysUtils, System.Classes;
var
S:set of byte;
C:TComponent;
begin
C:=TComponent.Create(nil);
C.Tag:=1;
s:=[C.Tag];
C.Free;
end.
如何调整代码使其适合WINx64编译?
最佳答案
Tag
是 NativeInt
。即 x86 中为 32 位,x64 中为 64 位。据我了解,32 位整数被视为序数,而 64 位整数则不是序数。我认为这就是编译器错误的原因,尽管我不能告诉你为什么 Integer
被认为是序数类型,而 Int64
不是。如果我不得不猜测,我想这与 Int64
不适合 x86 上的寄存器这一事实有关,因此与 1、2 和 相比,编译器需要进行完全不同的处理4 字节序数类型。
由于您可能不想要改变大小的东西,我希望您可以将其转换为Integer
:
s := [Integer(C.Tag)];
而且由于您只使用低 8 位,因此您可能应该将其转换为 Byte
:
s := [Byte(C.Tag)];
最好断言您在范围内:
Assert((C.Tag >= low(Byte)) and (C.Tag <= high(Byte)))
坦率地说,在我看来,您最好完全避免 Tag
。将数据存储在专用于该任务的变量中,并使用您可以选择的类型。作为一般规则,在我看来,Tag
是您应该避免使用的东西。它不是类型安全的,除非您碰巧有一个 NatoiveInt 来存储,它的名称没有给出其内容的指示,并且当多方尝试使用它时很容易发生冲突。
关于delphi - 如何调整为 WINx86 编写的代码以编译为 WINx64,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33423078/
我使用 windows 10 和 powershell,Haskell 似乎对标准输入的 UTF 编码有一些问题: > chcp 65001 > stack ghci ... > putStrLn "
我是一名优秀的程序员,十分优秀!