I am using SBCL and trying to pass a pointer to a c-struct to
a CFFI routine. The difficulty I am having is in formulating the
function call correctly. I have tried 'define-alien-routine' but
was getting nowhere. So now I am using cffi:foreign-funcall directly.
Here is the call:
(cffi:foreign-funcall
"v4lconvert_convert"
:POINTER convert-info
:POINTER *camera-format*
:POINTER *display-format*
:POINTER raw-image
:INT *local-length*
:POINTER pixdata
:INT pixbuf-size
:INT)
It is the pointers to the two '-format' items that are causing the
trouble I think. Both of them were defined using defcstruct.
But the error message I get is complaining about the expansion of
the foreign-funcall macro and makes no sense at all to me. Can
somebody help me interpret this?
; (CFFI:FOREIGN-FUNCALL "v4lconvert_convert"
; :POINTER ENCOMM.GUI::CONVERT-INFO
; :POINTER ENCOMM.GUI::*CAMERA-FORMAT* :POINTER
; ENCOMM.GUI::*DISPLAY-FORMAT* :POINTER
; ENCOMM.GUI::RAW-IMAGE :INT ENCOMM.GUI::*LOCAL-LENGTH*
; ...)
; --> LET LET LET LET LET LET LET CFFI-SYS:%FOREIGN-FUNCALL
; --> CFFI-SYS::%%FOREIGN-FUNCALL ALIEN-FUNCALL
; --> SB-ALIEN-INTERNALS:INVOKE-WITH-SAVED-FP-AND-PC LAMBDA FUNCTION
; --> SB-ALIEN-INTERNALS:NATURALIZE LET LET LET LET LET LET LET
; --> SB-ALIEN-INTERNALS:MAYBE-WITH-PINNED-OBJECTS PROGN
SB-C:%ALIEN-FUNCALL
; ==>
; (SB-ALIEN-INTERNALS:DEPORT #:G77
; '#<SB-ALIEN::ALIEN-SYSTEM-AREA-POINTER-TYPE SB-SYS:SYSTEM-AREA-POINTER>)
;
; caught WARNING:
; Derived type of #:G77 is
; (VALUES (ALIEN (* T)) &OPTIONAL),
; conflicting with its asserted type
; SB-SYS:SYSTEM-AREA-POINTER.
; See also:
; The SBCL Manual, Node "Handling of Types"