Hi. I want to use the following C function:

;; void ClearBackground(Color color);

Color is C Struct:

;; typedef struct Color {
;;     unsigned char r;        // Color red value
;;     unsigned char g;        // Color green value
;;     unsigned char b;        // Color blue value
;;     unsigned char a;        // Color alpha value
;; } Color;

So I wrote:

(cffi:defcstruct %color
  (r :uint8)
  (g :uint8)
  (b :uint8)
  (a :uint8))

(defvar *%lightgray* (cffi:foreign-alloc '(:struct %color)))

(cffi:with-foreign-slots ((r g b a) *%lightgray* (:struct %color))
  (setf (cffi:foreign-slot-value *%lightgray* '(:struct %color) 'r) 200)
  (setf (cffi:foreign-slot-value *%lightgray* '(:struct %color) 'g) 200)
  (setf (cffi:foreign-slot-value *%lightgray* '(:struct %color) 'b) 200)
  (setf (cffi:foreign-slot-value *%lightgray* '(:struct %color) 'a) 255)
  (format t "~s ~s ~s ~s" r g b a))
 
;; void ClearBackground(Color color);
(cffi:defcfun ("ClearBackground" %clear-background) :void
  (color (:struct %color)))

(defun clear-background (color)
  (%clear-background color))

But when i run

(clear-background *%lightgray*)

That does not work, I have already added my .asd file ":cffi-libffi" as dependency.

What is the problem? If this issue has no solution, is there an alternate way?