Re: Foreign Callbacks
> Windows often uses callbacks. How can I call back into a Lisp function? I > see define-foreign-callable, but the assumption seems to be that you're > defining functions to be called from by name from a DLL...? To call back > from Windows I'd need to pass some pointer-to-a-function, where the > function declaration was defined by Windows itself. So ultimately I assume > that I need to get a pointer to the function defined by > define-foreign-callable...? (fli:define-foreign-callable ("lisp-wnd-func" :result-type :long) ((hWnd :hwnd) (Msg :ulong) (wParam :ulong) (lParam :long)) ;your stuff here ) (defvar *lisp-wnd-func* (fli:make-pointer :symbol-name "lisp-wnd-func" :functionp t)) This is very old code, may be it's simpler now. *** Thanks! I read the chapter on pointers, but it didn't mention this use of make-pointer. But there was :functionp right in the reference... > Also, just to check: I'm going to pass a Lisp object out which then gets > sent back in from the callback. I don't want the object to be garbage > collected while it's out in the wild. I can do that by making sure some > Lisp thing points to it while it's held externally--but is there another > way? Or should I be worried about something else...? You don't pass a lisp object, you have to allocate a foreign object that you can pass to windows. *** Thanks again. Going back through the manual, I was able to find an example in section 2.4.2.