All Manuals > LispWorks Foreign Language Interface User Guide and Reference Manual > 7 Function, Macro and Variable Reference

NextPrevUpTopContentsIndex

foreign-slot-pointer

Function
Summary

Returns a pointer to a specified slot of an object.

Package

fli

Signature

foreign-slot-pointer object slot-name &key type object-type => pointer

Arguments

object

A foreign object, or a pointer to a foreign object.

slot-name

A symbol or a list of symbols identifying the slot to be accessed, as described for foreign-slot-value.

type

The type of the slot slot-name.

object-type

The FLI structure type that contains slot-name. If this is passed, the compiler might be able to optimize the access to the slot. If this is omitted, the object type is determined dynamically from object.

Values

pointer

A pointer to the slot identified by slot-name.

Description

The function foreign-slot-pointer takes a foreign object, a slot within the object, and optionally the type of the slot, and returns a pointer to the slot.

Example

In the following example a structure type called COMPASS is defined. An instance of the structure is allocated using allocate-foreign-object, pointed to by point1. Then foreign-slot-pointer is used to get a pointer, called point2, to the second slot of the foreign object.

(fli:define-c-struct COMPASS
  (west :int)
  (east :int))
(setq point1 (fli:allocate-foreign-object :type 
                                          'COMPASS))
(setq point2 (fli:foreign-slot-pointer point1 'east 
                                       :type :int))

The :type keyword can be used to return the value stored in the slot as a different type, providing the type is compatible. In the next example, point3 is set to be a pointer to the same address as point2, but it expects the value stored there to be a boolean.

(setq point3 (fli:foreign-slot-pointer point1 'east
              :type '(:boolean :int)))

Using dereference the value can be set as an integer using point2 and read as a boolean using point3.

(setf (fli:dereference point2) 0) (fli:dereference point3) (setf (fli:dereference point2) 1) (fli:dereference point3)
See also

Structures and unions
decf-pointer
incf-pointer
make-pointer
foreign-slot-value
foreign-slot-offset


LispWorks Foreign Language Interface User Guide and Reference Manual - 29 Sep 2017

NextPrevUpTopContentsIndex