LARGE_INTEGER或TLargeInteger?

时间:2012-11-20 07:49:59

标签: delphi

Windows.pas中,有:

  LARGE_INTEGER = record
    case Integer of
    0: (
      LowPart: DWORD;
      HighPart: Longint);
    1: (
      QuadPart: LONGLONG);
  end;

  TLargeInteger = Int64;

我看到几个最初声明为LARGE_INTEGER的Windows函数和结构成员已被翻译为TLargeInteger,例如:

  function QueryPerformanceCounter(var lpPerformanceCount: TLargeInteger): BOOL;
      stdcall;

另一个例子是:

  WIN32_STREAM_ID = record
    dwStreamId        : DWORD;
    dwStreamAttributes: DWORD;
    Size              : TLargeInteger;
    dwStreamNameSize  : DWORD;
    cStreamName       : array[0..0] of WCHAR;
  end;

对于Windows头文件中的每个函数参数和结构成员,TLargeInteger可以替代LARGE_INTEGER吗?

1 个答案:

答案 0 :(得分:8)

您始终可以在API翻译中安全地使用这两种类型。虽然,显然,一旦为特定功能选择了一种类型,只要你调用该功能,就必须坚持使用该类型。

  • 使用TLargeInteger可以更轻松地分配值,因为无需引用记录字段。
  • 使用LARGE_INTEGER可以更轻松地分为低位和高位32位部分。

既然编译器对64位整数有很好的支持,那么使用TLargeInteger可能更有意义。因为通常不需要将64位整数分成低位和高位。但是当编译器无法处理64位整数类型时,没有其他选项可以使用64位整数。