The structure is declared as:

[code=thinbasic]
%FTP_MAXFILENAMELEN = 512
%FTP_MAXOWNERNAMELEN = 64
%FTP_MAXGROUPNAMELEN = 64

TYPE FTPFILESTATUS
szFileName AS ASCIIZ * %FTP_MAXFILENAMELEN
szFileOwner AS ASCIIZ * %FTP_MAXOWNERNAMELEN
szFileGroup AS ASCIIZ * %FTP_MAXGROUPNAMELEN
bIsDirectory AS LONG
dwFileSize AS DWORD
dwFileLinks AS DWORD
dwFileVersion AS DWORD
dwFilePerms AS DWORD
stFileDate AS SYSTEMTIME
END TYPE
[/code]

And the function is declared as:

[code=thinbasic]
DECLARE FUNCTION FtpGetFirstFile LIB "csftpav6.dll" ALIAS "FtpGetFirstFileA" ( _
BYVAL hClient AS LONG, _
BYREF lpFileStatus AS FTPFILESTATUS _
) AS LONG
[/code]

This is basically the same as how it's declared for PowerBASIC.

Edit: Ah, I see what he's talking about. He's declaring it as BYVAL ... AS STRUCTNAME PTR rather than as BYREF ... STRUCTNAME. I suppose for completeness supporting the PTR syntax would be useful, but I do think it's counter-intuitive for a BASIC language implementation. Using BYREF just makes more sense to me.