DO decl
LOCAL lnCmdlinePtr, lnArrayPtr, lnParamCnt
lnCmdlinePtr = GetCommandLine()
lnParamCnt = 0
lnArrayPtr = CommandLineToArgvW(lnCmdlinePtr, @lnParamCnt)
IF lnArrayPtr = 0 Or lnParamCnt = 0
? "Error code returned:", GetLastError()
RETURN
ENDIF
LOCAL lnArraySize, lcBuffer
lnArraySize = GlobalSize(lnArrayPtr)
lcBuffer = Repli(Chr(0), lnArraySize)
= CopyMemory (@lcBuffer, lnArrayPtr, lnArraySize)
= GlobalFree (lnArrayPtr)
* first DWORD (4 bytes) stores a pointer to data
* I assume that it is always a contiguous memory block
lcBuffer = SUBSTR(lcBuffer, 5)
? lcBuffer
PROCEDURE decl
DECLARE INTEGER GetLastError IN kernel32
DECLARE INTEGER GetCommandLine IN kernel32
DECLARE INTEGER GlobalSize IN kernel32 INTEGER hMem
DECLARE INTEGER GlobalFree IN kernel32 INTEGER hMem
DECLARE INTEGER CommandLineToArgvW IN shell32;
INTEGER lpCmdLine, INTEGER @pNumArgs
DECLARE RtlMoveMemory IN kernel32 As CopyMemory;
STRING @Dest, INTEGER Source, INTEGER nLength
|