Re: Accessing elements in foreign array of structs
"Julian Baldwin (as julian at jbaldwin dot net)" <[email protected]> Sun, 12 Apr 2026 20:53:24 +0000
| Newsgroups | gmane.lisp.lispworks.general |
|---|---|
| Message-ID | <[email protected]> |
Sorry spam (original reply didn’t include the mailing list), but does
something like this work?
(use-package "FLI")
(define-c-struct (point (:foreign-name "tagPOINT"))
(x :long)
(y :long))
(with-dynamic-foreign-objects ((points point :nelems 3))
(let ((current (copy-pointer points)))
(dotimes (index 3)
(setf (foreign-slot-value current 'x :object-type 'point) index
(foreign-slot-value current 'y :object-type 'point) index)
(format t "~S: ~S ~S,~S~%"
index
current
(foreign-slot-value current 'x)
(foreign-slot-value current 'y))
(incf-pointer current))))
The compiler can optimise slot access if you pass the :object-type, but
it’s not strictly necessary.
Julian.
------ Original Message ------
>From "Erik Ronström (as erik dot ronstrom at doremir dot com)"
<[email protected]>
To "LispWorks" <[email protected]>
Date 13/4/2026 4:53:18 am
Subject Accessing elements in foreign array of structs
>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