[Ecls-list] updating refererence pointers in UFFI
dlong at stevens.edu
Wed Aug 30 06:34:14 UTC 2006
I've got some ecl+sqlite code lying around that I believe demonstrates
what you are looking for.
Here err-message is a c-string passed back by the dll:
(ffi:def-foreign-type str-pointer (* (* :unsigned-char)))
(ffi:def-function ("sqlite3_exec" sqlite3_exec)
(err-message (* (* :unsigned-char))))
(let ((err-ptr (ffi:allocate-foreign-object 'str-pointer)))
(sqlite3_exec db-conn sql-stm (ffi:callback 'sql-callback) 0 err-ptr))
To my knowledge, sqlite is giving back pointers to statically allocated
strings. If, in your case, the c code is allocating the memory, you'll
need to call it again when you want to free.
Hope this helps!
Dean O'Connor wrote:
> I may have asked his ages ago but can't seem to find any record of it.
> I should probably post this on some UFFI mail list if I can find one
> aswell, but any ideas with ECL.
> I am using UFFI to call our DLL (written in C) functions and most of it
> works ok.
> I can pass cstrings ok as in cl_init().
> But other functions such as cl_elementGetAttachment() creates C strings
> and return them by assigning them to dereferenced argument pointers.
> Also pointers to longs are dereferenced.
> Eg. for the "attachment" argument, in C we pass the address of a C
> string pointer. This get updated with the newly allocated C string
> So is there any way to pass the C-function via UFFI a C pointer arg of
> somekind and have it updated when returning to Lisp ??
> It doesn't seem to fit in with the Lisp way of doing things, but is this
> possible in any way ?
> I am not compiling any of this in Windows. Its just pure interpretive.
> long cl_init(const char *configFileName);
> ((ffi:def-function ("cl_init" init)
> ((configFileName :cstring ))
> :returning :long
> long cl_elementGetAttachment(long hDoc, unsigned int index, char **name,
> char **attachment, unsigned long *attachmentSize, bool detach);
> ((ffi:def-function ("cl_elementgetattachment" element-get-attachment)
> ((hdoc :long) (index :unsigned-short) (name
> (attachment :pointer-void) (attachmentsize
> (detach :unsigned-char))
> Using Tomcat but need to do more? Need to support web services, security?
> Get stuff done quickly with pre-integrated technology to make your job easier
> Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
> Ecls-list mailing list
> Ecls-list at lists.sourceforge.net
More information about the ecl-devel