簡単な答え: GetSystemInfo
Windows API の関数を使用して、システムが 32 ビットか 64 ビットかを調べます。
コード例:
program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils, Windows;
var
si: TSystemInfo;
const
PROCESSOR_ARCHITECTURE_AMD64 = 9;
PROCESSOR_ARCHITECTURE_IA64 = 6;
PROCESSOR_ARCHITECTURE_INTEL = 0;
PROCESSOR_ARCHITECTURE_UNKNOWN = $FFFF;
begin
GetSystemInfo(si);
case si.wProcessorArchitecture of
PROCESSOR_ARCHITECTURE_AMD64: Writeln('AMD64');
PROCESSOR_ARCHITECTURE_IA64: Writeln('IA64');
PROCESSOR_ARCHITECTURE_INTEL: Writeln('Intel');
PROCESSOR_ARCHITECTURE_UNKNOWN: Writeln('Unknown');
end;
Readln;
end.
最も一般的な 2 つの出力は、'Intel' (32 ビット x86) と 'AMD64' (64 ビット x64) です。実際、あなたはそれらのうちの1つを手に入れることを多かれ少なかれ信頼することができます.
実際には、すべての Delphi アプリケーションは 32 ビットであり、64 ビット Windows で (WOW64 を使用して) エミュレートされるため、上記のプログラムは常に「Intel」(32 ビット x86) を返すと思います。 Delphi コンパイラおよび IDE の 64 ビット リリースではありません。
したがって、エミュレーションに関係なく、システムの真のアーキテクチャを取得するには、GetNativeSystemInfo
関数を使用する必要があります。この関数にはラッパーがないため、kernel32.dll から自分でインポートする必要があります。
program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils, Windows;
var
si: TSystemInfo;
const
PROCESSOR_ARCHITECTURE_AMD64 = 9;
PROCESSOR_ARCHITECTURE_IA64 = 6;
PROCESSOR_ARCHITECTURE_INTEL = 0;
PROCESSOR_ARCHITECTURE_UNKNOWN = $FFFF;
procedure GetNativeSystemInfo(var lpSystemInfo: TSystemInfo); stdcall; external kernel32 name 'GetNativeSystemInfo';
begin
GetNativeSystemInfo(si);
case si.wProcessorArchitecture of
PROCESSOR_ARCHITECTURE_AMD64: Writeln('AMD64');
PROCESSOR_ARCHITECTURE_IA64: Writeln('IA64');
PROCESSOR_ARCHITECTURE_INTEL: Writeln('Intel');
PROCESSOR_ARCHITECTURE_UNKNOWN: Writeln('Unknown');
end;
Readln;
end.