[fpc-pascal] Function to know if WIN is 32 or 64

Henry Vermaak henry.vermaak at gmail.com
Tue Mar 15 15:35:21 CET 2011


On 15 March 2011 14:25, Marcos Douglas <md at delfire.net> wrote:
> On Tue, Mar 15, 2011 at 11:13 AM, Henry Vermaak <henry.vermaak at gmail.com> wrote:
>>
>> On 15 March 2011 14:05, Marcos Douglas <md at delfire.net> wrote:
>> > Is there some function to know if the Windows is 32 or 64?
>>
>> You can use the GetNativeSystemInfo function.  Check
>> TSystemInfo.wProcessorArchitecture = PROCESSOR_ARCHITECTURE_AMD64 to
>> see if it's 64 bit.
>
> What unit?

None, since the minimum supported client is XP.  Try to load it yourself, e.g.:

type
  TGNSIProc = procedure (var lpSystemInfo: TSystemInfo); stdcall;

const
  PROCESSOR_ARCHITECTURE_AMD64 = 9;

function Isx64: Boolean;
var
  si: TSystemInfo;
  GNSIProc: TGNSIProc;
begin
  Result := False;
  ZeroMemory(@si, SizeOf(si));
  @GNSIProc := GetProcAddress(GetModuleHandle('kernel32.dll'),
    'GetNativeSystemInfo');
  if @GNSIProc = nil then
    Exit;
  GNSIProc(si);
  if si.wProcessorArchitecture = PROCESSOR_ARCHITECTURE_AMD64 then
    Result := True;
end;

This ignores ia64, as you can see.

Henry



More information about the fpc-pascal mailing list