>FUNCTION SYSGetUserName >LOCAL lcUserName, lnBufSize, RetCode, NullCharPos > > lcUserName = REPLICATE(CHR(32), 80) > lnBufSize = 80 > > *---call WINAPI > Declare Integer GetUserName IN WIN32API String @lpBuffer, Integer nSize > RetCode = GetUserName(@lcUserName, lnBufSize) > CLEAR DLLS > > *---search for the end of the string > NullCharPos = AT(CHR(0), lcUserName) > IF NullCharPos > 0 THEN > lcUserName = LEFT(lcUserName, NullCharPos - 1) > ELSE > lcUserName = "" > ENDIF > > RETURN lcUserName > >ENDFUNC >>>
BOOL GetUserName( LPTSTR lpBuffer, // name buffer LPDWORD nSize // size of name buffer );The "LP" prefix means "Long Pointer", indicating passing by refernce. This is the reason your attempt "blew up". It's passed by reference because it receives the number of bytes copied to the buffer. Thus, it'll allow to simplify your code. Note that if the function fails (returns 0) because the buffer is too small, the nSize parameter will contain the size required.