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
>