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.
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