Краткий ответ: используйте функцию 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.
Двумя наиболее распространенными выходами являются Intel (32-разрядная версия x86) и AMD64 (64-разрядная версия x64). На самом деле, вы можете более или менее доверять тому, что получите один из них.
Теперь, на самом деле, я считаю, что приведенная выше программа будет всегда возвращать 'Intel' (32-битный x86), потому что все приложения Delphi 32-битные, и поэтому они эмулируются под Windows (с использованием WOW64) - 64-разрядная версия компилятора Delphi и IDE отсутствует.
Таким образом, чтобы получить истинную архитектуру системы, независимо от эмуляции, вы должны использовать функцию 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.