SET PROCEDURE TO MEMMGR ADDITIVE oHeap = CREATEOBJ('Heap') LOCAL n3PU_LARGE_Values, cBuffer n3PULARGE_Values = oHeap.AllocInitAs(24,CHR(0)) DECLARE INTEGER GetDiskFreeSpaceEx IN Win32API ; STRING @ lpDirectoryName, ; INTEGER lpFreeBytesAvailable, ; INTEGER lpTotalNumberOfBytes, ; INTEGER lpTotalNumberOfFreeBytes IF GetDiskFreeSpaceEx('C:\', ; n3PULARGE_Values,; n3PULARGE_Values+8, ; n3PULARGE_Values+16) # 0 cBuffer = oHeap.CopyFrom(n3PULARGE_Values) ? 'Free bytes', ConvertULARGE(SUBST(cBuffer,1,8)) ? 'Tot. bytes', ConvertULARGE(SUBST(cBuffer,9,8)) ? 'Free bytes', ConvertULARGE(SUBST(cBuffer,17,8)) ENDIF oHeap.DeAlloc(n3PULARGE_Values) oHeap = '' FUNCTION ConvertULARGE LPARAMETER tcULARGE LOCAL nCtr, nValue nValue = 0 FOR nCtr = 8 TO 1 STEP -1 nValue = (nValue * 256) + ASC(SUBST(tcULARGE,nCtr,1)) ENDFOR RETURN nValueNote - I allocate a block of memory large enough to hold the 3 values, and pass pointers to the sections of the memory block rather than passing strings. Each ULARGE is 8 bytes in length. The conversion is rather brute force, but it works; numbers are stored with the Least Significant Byte first. Be aware that rouding errors may occur, since VFP is forced to work with this as a floating point number.