Gegen das 2GB Problem von GlobalMemorystatus, gibt es auch noch GlobalMemoryStatusEx:
Delphi-Quellcode:
type DWORDLONG=int64; //uint64 passt besser zu DWORDLONG
//bringt aber unter Delphi 7 falsche Werte
type TMemoryStatusEx=packed record
dwLength: DWORD;
dwMemoryLoad: DWORD;
ullTotalPhys: DWORDLONG;
ullAvailPhys: DWORDLONG;
ullTotalPageFile: DWORDLONG;
ullAvailPageFile: DWORDLONG;
ullTotalVirtual: DWORDLONG;
ullAvailVirtual: DWORDLONG;
ullAvailExtendedVirtual: DWORDLONG;
end;
function GlobalMemoryStatusEx(var lpBuffer: TMemoryStatusEx):bool; stdcall;
external 'kernel32.dll' name 'GlobalMemoryStatusEx';
procedure TForm1.Button1Click(Sender: TObject);
var mem:TMemoryStatusEx;
begin
mem.dwLength:=sizeof(mem);
GlobalMemoryStatusEx(mem);
showmessage(inttostr(memEx.ullTotalPhys)); // -> 3211505664
end;
Ansonsten besteht noch der Fehler mit der Division durch 0 und mein Programm benötigt keinen Speicher (auch wenn es läuft).
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.