[REBOL] Re: Calling Windows API
From: petr:krenzelok:trz:cz at: 13-Dec-2004 14:18
Patrick Philipot wrote:
>Hello Rebol-List,
>
>I've got a problem when calling windows API.
>
>Here is an example :
>
>; GetVolumeInformationA is returning the disk system (FAT32 or NTFS)
>; in a buffer (FileSystemNameBuffer)that I have declared
>; FileSystemNameBuffer: "YYYYYYYYYYYYYYYYYYY"
>
>kernel32.dll: load/library %/C/WINDOWS/system32/kernel32.dll
>GetVolumeInfo: make routine! [
> disk [string!]
> lpVolumeNameBuffer [string!]
> size [integer!]
> lpVolumeSerialNumber [integer!]
> lpMaximumComponentLength [integer!]
> lpFileSystemFlags [integer!]
> lpFileSystemNameBuffer [string!]
> size2 [integer!]
> return: [integer!]
>] kernel32.dll "GetVolumeInformationA"
>VolumeNameBuffer: "XXXXXXXXXXXXXXXXXXXX"
>FileSystemNameBuffer: "YYYYYYYYYYYYYYYYYYY"
>GetVolumeInfo "C:\" VolumeNameBuffer 20 0 0 0 FileSystemNameBuffer 20
>?? FileSystemNameBuffer
>
>The problem is that I don't get a clean buffer but
>
>>>?? FileSystemNameBuffer
>>>
>>>
>FileSystemNameBuffer: "FAT32^@YYYYYYYYYYYYY"
>== "FAT32^@YYYYYYYYYYYYY"
>
It should be easy to copy/part find string "^@" or something like that,
but, arent those additional parameters just pointers? Try change their
typ, e.g. to [char*] and see what gets into buffers, maybe rebol will do
it for you. I would also try to stop preallocating those buffers with
content. What about make string! 100 or something like that? Dunno,
let's hope some more experienced rebollers step-in here and give you the
right answers ...
cheers,
-pekr-