6

Windows.pas,有:

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

  TLargeInteger = Int64;

我看到几个 Windows 函数和结构成员,它们最初声明为LARGE_INTEGER已翻译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;

可以TLargeInteger替代LARGE_INTEGERWindows 头文件中的每个函数参数和结构成员吗?

4

1 回答 1

8

您始终可以在 API 翻译中安全地互换使用这两种类型。尽管很明显,一旦您为特定函数选择了一种类型,则无论何时调用该函数都必须坚持使用该类型。

  • 使用TLargeInteger使得赋值更容易,因为不需要引用记录字段。
  • 使用LARGE_INTEGER可以更容易地分成低和高 32 位部分。

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

于 2012-11-20T08:17:42.480 回答