Re: Accessing elements in foreign array of structs

"David McClain (as dbm at refined-audiometrics dot com)" <[email protected]> Sun, 12 Apr 2026 12:19:55 -0700
Newsgroups gmane.lisp.lispworks.general
Message-ID <[email protected]>
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


_______________________________________________
Lisp Hug - the mailing list for LispWorks users
[email protected]
http://www.lispworks.com/support/lisp-hug.html