Viva, <br><br><div><span class="gmail_quote">On 2/12/07, <b class="gmail_sendername">Luís Oliveira</b> <<a href="mailto:luismbo@gmail.com">luismbo@gmail.com</a>> wrote:</span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
On 12/02/07, Edgar Gonçalves <<a href="mailto:edgar.goncalves@gmail.com">edgar.goncalves@gmail.com</a>> wrote:<br>> 1) Unlike AllegroCL or Lispworks, Clisp (and SBCL too, btw) requires me to<br>> precede all defcfuns related to a library with:
<br>><br>> #+clisp (cffi::use-foreign-library Tcl)<br>> (defcfun ("Tcl_FindExecutable" tcl-find-executable) :void<br>>   (argv0 :string))<br><br>That doesn't sound right. You should only need to call
<br>(use-foreign-library tcl) only once, some time before you load your<br>bindings.</blockquote><div><br>Let me rephrase it a bit, to avoid misunderstandings. Yes, I call (use-foreign-library tcl) only once. The point is that I *need* to call it, whereas with ACL, for instance, I don't - the defcfuns just work for themselves.
<br></div><br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">> 2) When I load the saved image (using the code from above), I get an error
<br>> when applying defcfun'ed functions, telling me the library wasn't found:<br><br>Just tested with GNU CLISP 2.41 (2006-10-13) on OSX. Loaded cffi-test,<br>saved an image (tried with ":executable t" too), restarted with the
<br>image, and ran (rt:do-tests) and it works. (Except some funcall.*<br>tests fail at first, for some reason. I blame it on some RT<br>weirdness.)<br><br>AFAICT, CLISP correctly reloads the libraries at startup. Can you try
<br>this with cffi-test or otherwise provide some sort of test case?</blockquote><div><br>Actually, I haven't tried tests, but I can't seem to get past the library bindings.lisp. It seems to be a problem with the dll (I'm running Windows 2003), given that my 
cl.exe (version 14.00.50727.42 for 80x86 ) won't recognize the <stdint.h>, and that my cygwin (latest, just checked for updates) makes a dll that hangs bindings.fas while loading.<br><br>As for a short test case, here's the smallest I can make that fires up my error. After loading clisp, and loading asdf, I eval:
<br><br>,-----<br>| (asdf:operate 'asdf:load-op :cffi)<br>| <br>| (cffi:define-foreign-library odbc<br>|   (:windows (:or "odbc32.dll"))<br>|   (t (:default "odbc32.dll")))<br>| <br>| (cffi:defcfun ("SQLAllocHandle" sql-handle) :short)
<br>| <br>| (sql-handle)<br>`-----<br><br>The last form brings me to the following error:<br>WARNING: FFI::FOREIGN-LIBRARY-FUNCTION: no dynamic object named "SQLAllocHandle" in library :DEFAULT<br>*** - FUNCALL: undefined function NIL
<br><br><br>with the relevant backtrace being:<br><br><11> #<SYSTEM-FUNCTION ERROR><br><12> #<COMPILED-FUNCTION SYSTEM::CHECK-VALUE><br><13> #<SYSTEM-FUNCTION FUNCALL> 1<br>EVAL frame for form 
<br>(VALUES<br> (FUNCALL<br>  (LOAD-TIME-VALUE<br>   (MULTIPLE-VALUE-BIND (CFFI-SYS::FF ERROR)<br>    (IGNORE-ERRORS<br>     (FFI::FOREIGN-LIBRARY-FUNCTION "SQLAllocHandle" (FFI::FOREIGN-LIBRARY :DEFAULT) NIL NIL
<br>      (FFI:PARSE-C-TYPE '(FFI:C-FUNCTION (:ARGUMENTS) (:RETURN-TYPE FFI:SHORT) (:LANGUAGE :STDC)))))<br>    (OR CFFI-SYS::FF<br>     (WARN<br>      (FORMAT NIL "~?" (SIMPLE-CONDITION-FORMAT-CONTROL ERROR)
<br>       (SIMPLE-CONDITION-FORMAT-ARGUMENTS ERROR))))))))<br>APPLY frame for call (SQL-HANDLE)<br><14> <br>#<FUNCTION SQL-HANDLE NIL (DECLARE (SYSTEM::IN-DEFUN SQL-HANDLE))<br>  (BLOCK SQL-HANDLE (VALUES (CFFI-SYS:%FOREIGN-FUNCALL "SQLAllocHandle" :SHORT)))> 0
<br>EVAL frame for form (SQL-HANDLE)<br><br><br><br>Hope this helps tracing out something, tell me if you need anything more.<br><br>Thanks,<br>Edgar Gonçalves<br></div></div>