Special variables in FLI
I have a DLL that I'm interfacing with (obviously), during the lifetime of which, I must initialize a global variables, use it and free it. Simple enough. All C functions take this global pointer as the first parameter. So, I quickly whipped this up: (defvar *gp*) ; global pointer (define-foreign-function (init-gp "init_gp") ((gp-pointer (:pointer (:pointer gp-type)))) :result-type :boolean) (define-foreign-function (free-gp "free_gp") ((:constant *gp* (:pointer gp-type))) :result-type :boolean) (defmacro with-gp (&body body) `(let ((*gp* (allocate-foreign-object :type '(:pointer gp-type)))) (when (init-gp (make-pointer :address (pointer-address *gp*) :type 'gp-type)) ,@body (free-gp)))) It should be noted that init-gp *does* take a ** pointer (it allocates the structure internally and returns it through the pointer). All other functions just take a * pointer - the one returned by the init function. This compiles just fine, but doesn't quite work. The body executes just fine, which leads me to believe that *gp* was allocated successfully, a pointer to it created and the init-gp function did its magic well. However, when free-gp is called, I get an #<unbound> error (can't coerce #<unbound> to foreign type (:pointer gp-type)). Are special variables able to be used like this with the FLI? Perhaps there is something else I am doing here that is causing me grief. Any advice is appreciated. Thanks! Jeff M. -- http://www.retrobyte.org mailto:massung@gmail.com