델파이 2007을 사용하는 시스템의 총 실제 메모리를 가져와야합니다. 4GB 이상의 시스템에서 GlobalMemoryStatus를 사용하면 오류가 발생합니다. Delphi 2007에서는 GlobalMemoryStatusEx가 존재하지 않으므로 함수 호출을 수동으로 프로그램에 추가했습니다. 그것은 내 Windows 7 x64에서 메모리를 올바르게 반환하지만 (8GB) Vista x32 시스템에서는 여전히 잘못된 값을 반환합니다 (이 시스템에서 4GB이어야하지만 2.9GB를 반환합니다). 어떤 생각을 잘못하고있을 수 있습니까? GlobalMemoryStatusEx는 이전 운영 체제에서도 작동합니까?델파이 2007 : 총 RAM을 얻기위한 GlobalMemoryStatus
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 - 완료 및 감사합니다. –