Delphi 德尔菲,努布问题#2

Delphi 德尔菲,努布问题#2,delphi,syntax,Delphi,Syntax,在以下代码中: type TDoubleDWORD = record L, H: Longint; end; function BitSelection(const Block: Integer; const A; const ASize: Integer): Longint; var H, L: Longint; begin H := TDoubleDWORD(Block).H; L := TDoubleDWORD(B

在以下代码中:

type
    TDoubleDWORD = record
    L, H: Longint;
  end;
function BitSelection(const Block: Integer; const A;
                      const ASize: Integer): Longint;
var
  H, L: Longint;
begin
  H := TDoubleDWORD(Block).H;
  L := TDoubleDWORD(Block).L;
我的问题是:
1) 参数A的类型是什么?
2) “双字(块)”是什么意思?这是记录TDoubleDWORD的某种构造函数吗?
抱歉,如果这些问题看起来很琐碎,但我对德尔福很陌生,谷歌帮不了什么忙

  • 这是演员阵容
    A
    是非类型化参数。关于这一点的问题,请参阅一篇文章


    TDoubleDWORD(Block)
    是对
    TDoubleDWORD

    的类型转换,代码似乎有点奇怪。这就好像作者没有意识到
    Int64
    UInt64
    。该代码是错误的。他正在将32位的值转换为64位长的记录。它最终会访问错误的内存,这是一种缓冲区溢出(顺便说一句,Delphi已经使用Int64Rec类型来访问64位值的一部分)。非类型化参数非常奇怪,我认为它们有点像C中的“void*”,只是它使用引用语义而不是指针语义。“作废和作废”是否有效?我不知道。避免使用非类型化参数。您需要阅读此类代码,才能理解一些旧的delphi代码,但看到非类型化的参数表明(a)它确实是旧代码,或者(b)它可能是邪恶的。@Warren,它是旧代码,文件日期为2000,我认为这里的“Block”应该是一个Int64。@Warren:在变量存在之前,非类型化参数是一个非常好的方法。。我在TP日的函数中大量使用了它,比如现在的格式:)