6

には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

4

1 に答える 1

8

API 変換では、これら 2 つの型を常に安全に交換して使用できます。ただし、明らかに、特定の関数に対して 1 つの型を選択すると、その関数を呼び出すたびにその型に固執する必要があります。

  • を使用TLargeIntegerすると、レコード フィールドを参照する必要がないため、値の割り当てが簡単になります。
  • を使用LARGE_INTEGERすると、32 ビットの下位部分と上位部分に分けやすくなります。

コンパイラが 64 ビット整数を適切にサポートするようになったので、TLargeInteger. 通常、64 ビット整数を下位部分と上位部分に分ける必要がないためです。しかし、コンパイラが 64 ビット整数型を処理できなかったときは、64 ビット整数を扱う他のオプションはありませんでした。

于 2012-11-20T08:17:42.480 に答える