Cześć.
Tmemorystatus uparcie zwraca 4GB. Próbowałem GlobalMemoryStatusEx też 4GB. Chodzi o kompilatory 32bitowe Lazarus bądź DelphiXE, w obu przypadkach to samo. Zna ktoś sposób na wyświetlenie ilości pamięci RAM > 4GB ?
0
0
- jaki system
- kod
- u mnie na D XE DWORDLONG = UInt64; więc jest OK
0
-
System Win7 64bit, 32-bitowy Lazarus.
-
Kod:
procedure GetMemInfo(var TPRAM, APRAM : Qword);
var
Ram: TmemoryStatus;
begin
TPRAM:=Ram.dwTotalPhys;
APRAM:=Ram.dwAvailPhys;
end;
- Próbowałem róznych typów i to samo...
0
MSDN:
On computers with more than 4 GB of memory, the MEMORYSTATUS structure can return incorrect information, reporting a value of –1 to indicate an overflow. If your application is at risk for this behavior, use the GlobalMemoryStatusEx function instead of the GlobalMemoryStatus function.
0
procedure TContainer.GetMemory();
var
FMemory: TMemoryStatusEx;
FProcesMemory: PPROCESS_MEMORY_COUNTERS;
FTotal: NativeInt;
FSize: NativeInt;
begin
try
if csDestroying in Self.ComponentState then
Exit;
try
FSize := SizeOf(FProcesMemory^);
GetMem(FProcesMemory, FSize);
FProcesMemory^.cb := FSize;
FillChar(FMemory, SizeOf(FMemory), 0);
FMemory.dwLength := SizeOf(FMemory);
GlobalMemoryStatusEx(FMemory);
FTotal := FMemory.ullTotalPhys div 1024;
finally
FreeMem(FProcesMemory, SizeOf(FProcesMemory^));
end;
except
end;
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;
Dziala i pobiera pamiec w 32bit aplikacji > 4GB