Re: Accessing elements in foreign array of structs
"David McClain (as dbm at refined-audiometrics dot com)" <[email protected]> Sun, 12 Apr 2026 12:24:31 -0700
| Newsgroups | gmane.lisp.lispworks.general |
|---|---|
| Message-ID | <[email protected]> |
Or perhaps you were asking about how to reference a struct slot of a struct element in an array of structs? Doesn’t this work? (fli:foreign-slot-value (fli:dereference array-ptr :index n) 'slot-name) > On Apr 12, 2026, at 12:19, David McClain <[email protected]> wrote: > > Er, sorry, but your question is somewhat confusing… > > You mentioned that your foreign function requires a points array as an input argument. Where do these points originate? > > From external functions? or from your running Lisp image? > > And if they come from Lisp, then how do you expect to provide them without first allocating and stuffing their slot values? > > [BTW… you are aware, aren't you, that using FLI:ALLOCATE-FOREIGN-OBJECT, without an accompanying FREE, will leak memory? I always use FLI:WITH-DYNAMIC-FOREIGN-OBJECTS and then inside of it I use FLI:ALLOCATE-DYNAMIC-FOREIGN-OBJECT. This surrounds the allocations with an UNWIND-PROTECT and a forced free, of sorts.] > >> On Apr 12, 2026, at 11:53, Erik Ronström (as erik dot ronstrom at doremir dot com) <[email protected]> wrote: >> >> Hi, >> >> I am calling a foreign function that takes an array of points as input. >> >> (fli:define-c-struct (point (:foreign-name "tagPOINT")) >> (x :long) >> (y :long)) >> >> (let ((points (fli:allocate-foreign-object :type 'point :nelems 3))) >> >> (the-foreign-function points)) >> >> >> I can't figure out how to access the elements of the foreign array directly. >> >> This works: >> >> (let ((p (fli:allocate-foreign-object :type 'point))) >> (setf (fli:foreign-slot-value p 'x) 100 >> (fli:foreign-slot-value p 'y) 200 >> (fli:dereference points :index 0) p) >> >> But how do I set the elements of points without using an intermediate object? >> >> Erik >> >> >> _______________________________________________ >> Lisp Hug - the mailing list for LispWorks users >> [email protected] >> http://www.lispworks.com/support/lisp-hug.html >