FFI, COM and accessing fli pointers
Hi,
I'm playing with some COM interface under Vista with LWW 5.0.1.
I have a problem with one of the structures that has been generated.
I don't know how I can access one of its fields. The structure looks like
this :
;;;; typedef struct tagFOLDERPROPS {
;;;; FOLDERPROPSSIZE cbSize; // Size of
this structure
;;;; STOREFOLDERID dwFolderId; // Handle of
this folder
;;;; INT cSubFolders; // Number of
sub-folders
;;;; SPECIALFOLDER_XMIT sfType; // Special
folder type
;;;; DWORD cUnread; // Number of
un-read messages
;;;; DWORD cMessage; // Total # of
messages
;;;; CHAR szName[256]; // The Folder Name
;;;; } FOLDERPROPS, *LPFOLDERPROPS;
I can allocate an object :
(setq foo (fli:allocate-foreign-object :type 'FOLDERPROPS))
If I want to get the cbSize field, no problem :
36 > (fli:foreign-slot-value foo 'cb-size)
187
But :
37 > (fli:foreign-slot-value foo 'sz-name)
Error: Attempted to dereference a pointer to aggregate type (:C-ARRAY
COM::CHAR 256).
1 (abort) Return to level 0.
2 Return to top loop level 0.
I have tried several things to access this szName field but I'm stuck. I'd
like to copy this as a lisp string. Any idea ?
Thanks for any clue,
Fabrice Popineau
------------------------
e-mail: Fabrice.Popineau@supelec.fr | The difference between theory
voice-mail: +33 (0) 387764715 | and practice, is that
surface-mail: Supelec, 2 rue E. Belin, | theoretically,
F-57070 Metz | there is no difference !