GlobalMemoryStatusEx

The GlobalMemoryStatusEx function expects a pointer to a MEMORYSTATUSEX structure.
The application is responsible to allocate and free the required memory for the structure, the default Translation options are used.
The are a few modifications done to the created code, see comments in the example below.

Copy code
LOCAL loMemStatus
m.loMemStatus = CREATEOBJECT('MEMORYSTATUSEX')
? GlobalMemoryStatusEx(m.loMemStatus.Address)
? 'Memory Load', m.loMemStatus.dwMemoryLoad
? 'Physical memory', m.loMemStatus.ullTotalPhys

FUNCTION GlobalMemoryStatusEx(lpBuffer)
	&& BOOL WINAPI GlobalMemoryStatusEx( __inout  LPMEMORYSTATUSEX lpBuffer)
	DECLARE INTEGER GlobalMemoryStatusEx IN WIN32API INTEGER 
	RETURN GlobalMemoryStatusEx(m.lpBuffer)
ENDFUNC

DEFINE CLASS MEMORYSTATUSEX AS Exception

	Address = 0
	SizeOf = 64
	Name = "MEMORYSTATUSEX"
	&& structure fields
	dwLength = .F.
	dwMemoryLoad = .F.
	ullTotalPhys = .F.
	ullAvailPhys = .F.
	ullTotalPageFile = .F.
	ullAvailPageFile = .F.
	ullTotalVirtual = .F.
	ullAvailVirtual = .F.
	ullAvailExtendedVirtual = .F.

	PROCEDURE Init()
		THIS.Address = AllocMem(THIS.SizeOf)
		THIS.dwLength = THIS.SizeOf && manually added, this member needs to be set to the size of the structure
	ENDPROC

	PROCEDURE Destroy()
		FreeMem(THIS.Address)
	ENDPROC

	PROCEDURE dwLength_Access()
		RETURN ReadUInt(THIS.Address)
	ENDPROC

	PROCEDURE dwLength_Assign(lnNewVal)
		WriteUInt(THIS.Address,lnNewVal)
	ENDPROC

	PROCEDURE dwMemoryLoad_Access()
		RETURN ReadUInt(THIS.Address+4)
	ENDPROC

	PROCEDURE ullTotalPhys_Access()
		RETURN ReadUInt64(THIS.Address+8, 4) && changed to return value as numeric value
	ENDPROC

	PROCEDURE ullAvailPhys_Access()
		RETURN ReadUInt64(THIS.Address+16, 4)
	ENDPROC

	PROCEDURE ullTotalPageFile_Access()
		RETURN ReadUInt64(THIS.Address+24, 4)
	ENDPROC

	PROCEDURE ullAvailPageFile_Access()
		RETURN ReadUInt64(THIS.Address+32, 4)
	ENDPROC

	PROCEDURE ullTotalVirtual_Access()
		RETURN ReadUInt64(THIS.Address+40, 4)
	ENDPROC

	PROCEDURE ullAvailVirtual_Access()
		RETURN ReadUInt64(THIS.Address+48, 4)
	ENDPROC

	PROCEDURE ullAvailExtendedVirtual_Access()
		RETURN ReadUInt64(THIS.Address+56, 4)
	ENDPROC

ENDDEFINE