Next Prev Up Top Contents Index

1.2.2 Defining an FLI function

This next step uses the define-foreign-function macro to define an FLI function, or interface function, to be used to call the GetCursorPos function. An interface function takes its arguments, converts them into a C format, calls the foreign function, receives the return values, and converts them into a suitable Lisp format.

(fli:define-foreign-function (get-cursor-position "GetCursorPos")
  ((lp-point lppoint))
  :result-type bool)

In this example, the defined FLI function is get-cursor-position . It takes as its argument a pointer of type lppoint , converts this to a C format, and calls GetCursorPos . It takes the return value it receives from GetCursorPos and converts it into the FLI bool type we defined earlier.

We have now defined all the types and functions required to get the cursor position. The next step is to allocate memory for an instance of the tagPOINT structure using fli:allocate-foreign-object . The following line of code binds location to a pointer that points to such an instance.

(setq location (fli:allocate-foreign-object :type 'point))

Finally, we can use our interface function get-cursor-position to get the cursor position:

(get-cursor-position location)
LispWorks Foreign Language Interface User Guide and Reference Manual - 14 Dec 2001

Next Prev Up Top Contents Index