我需要得到使用Delphi 2007系統的總物理內存。在4GB或更大的系統上使用GlobalMemoryStatus似乎給我錯誤。在Delphi 2007中,GlobalMemoryStatusEx不存在,因此我手動將函數調用添加到了我的程序中。它正確地返回我的Windows 7 x64上的內存(8GB),但在Vista x32系統上它仍然返回不正確的值(在此係統上應爲4GB,但返回2.9GB)。 任何想法我可能做錯了什麼? GlobalMemoryStatusEx可以在較舊的操作系統上運行嗎?德爾福2007年:GlobalMemoryStatus得到總RAM
type
DWORDLONG = UInt64;
PMemoryStatusEx = ^TMemoryStatusEx;
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;
function getmemorysize:word;
var
memory: TMemoryStatusEx;
begin
FillChar(memory, SizeOf(memory), 0);
memory.dwLength := SizeOf(memory);
GlobalMemoryStatusEx(memory);
result:=memory.ullTotalPhys div (1024*1024);
end;
http://blogs.msdn.com/b/hiltonl/archive/2007/04/13/the-3gb-not-4gb-ram-problem.aspx –
@SertacAkyuz這回答我的Vista問題,但你呢?知道上述代碼是否可以在Windows XP等較早的操作系統上運行?我只是有點擔心,因爲我必須手動添加GlobalMemoryStatusEx的原型。謝謝。 –
Ace - 聲明可能由於IDE的Win9x支持而丟失,請不要擔心。 @Ken - 完成,謝謝。 –