I have a define-foreign-type, translate-to-foreign, translate-from-foreign and a defclass at bottom of this page
These four sections of code make up my types. At the top of the code is a defcstruct that, I am trying to make a part of my types by changing the :actual-type in the define-foreign-type to:
(:actual-type '(:pointer (:struct rect1))).
The :actual-type is normally :pointer and that makes it so the defcfun at the bottom of code section compiles no problem. When I compile the code here I get an error in my defcun saying that "(:pointer (:struct rect1)) is not a cffi type". Why is it doing this and how can I make the actual type of my define-foreign-type a (:pointer (:struct rect1))? The reason I would like to do this is so I can convert the C data to lisp data as soon as possible. If this won't work and you have any other suggestions on how to do this professionally. pls let me know. Thank you.
;;;;Code
(cffi:defcstruct rect1 (x :int) (y :int) (width :int) (height :int)) (define-foreign-type rect () ((garbage-collect :reader garbage-collect :initform nil :initarg :garbage-collect)) (:actual-type '(:pointer (:struct rect1))) (:simple-parser rect)) (defclass cv-rect () ((c-pointer :reader c-pointer :initarg :c-pointer))) (defmethod translate-to-foreign ((lisp-value cv-rect) (c-type rect)) (values (c-pointer lisp-value) lisp-value)) (defmethod translate-from-foreign (c-pointer (c-type rect)) (let ((rectangle (make-instance 'cv-rect :c-pointer c-pointer))) (when (garbage-collect c-type) (tg:finalize rectangle (lambda () (del-rect c-pointer)))) rectangle)) (defcfun ("cv_create_Rect4" rect-4) rect "RECT constructor." (x :int) (y :int) (width :int) (height :int))