Delphi XE中LongWord和Cardinal之间的区别?

时间:2011-02-10 14:58:39

标签: delphi constants delphi-xe typed

此代码无法在XE中编译:

const
    InitSignature : array[0..3] of LongWord =
        ($67452301, $EFCDAB89, $98BADCFE, $10325476);

[DCC错误]:E2026预期的常量表达式

但是这样做了:

const
    InitSignature : array[0..3] of Cardinal =
    ($67452301, $EFCDAB89, $98BADCFE, $10325476);

可分配的类型常量为ON。

如果我在第一个示例中将所有数组值强制转换为LongWord,则代码将进行编译。 但我不知道LongWord和红衣主教有什么区别?

3 个答案:

答案 0 :(得分:3)

我会变得大胆,并声明 * 没有差异* 。你以某种方式得出了错误的结论,并向我们提供的信息不足以帮助你。我确信你没有粘贴你的代码的1:1副本,而且你遗漏了相关的东西。

可能是一个邪恶的同事,在开始括号之前粘贴了一个小的univodeble unicode字符,并将其他角色定义为相同的字符。它也可能更明显一些。

你能在干净的项目中重现这个问题吗?因为我很确定你做不到。如果可以,请回复。如果你不能,发布更多上下文。无论如何,证明我错了。

答案 1 :(得分:1)

您的代码中可能有一个名为longword的函数。

function LongWord: Integer;
begin
 result := 0;
end;

procedure Foo;
const
    InitSignature : array[0..3] of LongWord =
        ($67452301, $EFCDAB89, $98BADCFE, $10325476);
begin
  //...
end;

答案 2 :(得分:0)

下面的代码在Delphi XE中编译得很好。

向我们展示您的代码的更多上下文;它看起来像是为你重新定义LongWord

program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils;

const
  InitSignatureLongWords : array[0..3] of LongWord =
    ($67452301, $EFCDAB89, $98BADCFE, $10325476);

const
  InitSignatureCardinals : array[0..3] of Cardinal =
    ($67452301, $EFCDAB89, $98BADCFE, $10325476);

begin
end.

- 的Jeroen