Für ein 32-Bit-Programm ist die hier verlinkte und auch hier veröffentlichte Funktion erschöpfend. Für einen allgemeingültigen Quelltext, nämlich einen, der 32- und 64-Bit-Compilate - möglichst ohne Compilerschalter - übersetzt, taugt sie jedoch nicht(s), denn ein 64-Bit-Programm wird sich nie in einer Wow64-Umgebung wiederfinden und mithin fälschlicherweise 32 Bit zurückmelden (bzw. genaugenommen die 64 Bit verneinen).
Wird von dem Programm vorher auf 64 Bit geprüft, so z.B. mit der Größe eines Pointers, müßte dieser Quelltext "bitanzahlübergreifend" funktionieren, denn ein 64-Bit-Programm wird dann die 64 Bit zurückliefern, anderenfalls geht es wie gewohnt weiter. Diese Prüfung kann vorangestellt werden und mithin vor dem Funktionsaufruf oder am Anfang derselben geschehen (Quellcode etwas vereinfacht und an das originale PBool angepaßt):
Delphi-Quellcode:
function Is64BitWin:Boolean;
var
IsWow64Result:BOOL;
IsWow64Process:
function(
Handle:THandle;
var Res:PBOOL):BOOL;
stdcall;
begin
if SizeOf(Pointer)>4
{=8?!} then
begin
result:=true;
exit
end
else
begin
IsWow64Process:=GetProcAddress(GetModuleHandle('
kernel32'),'
IsWow64Process');
if Assigned(IsWow64Process)
then
begin
if not IsWow64Process(GetCurrentProcess, IsWow64Result)
then
raise Exception.Create('
Bad process handle');
Result:=Boolean(IsWow64Result)
end
else Result:=false
end
end;
Die Exceptionmeldung ist n.m.B. nicht nötig und stört nur. Auch wenn der Funktionsaufruf "IsWow64Process" fehlschlägt, sind die Ergebnisse korrekt.