--
Edgar Gonçalves
Instituto Superior Técnico,
INESC-ID - Software Engineering Group,
Portugal
On 2/13/07, Luís Oliveira
luismbo@gmail.com wrote:
> On 13/02/07, Edgar Gonçalves
edgar.goncalves@gmail.com wrote:
> > ,-----
> > | (asdf:operate 'asdf:load-op :cffi)
> > |
> > | (cffi:define-foreign-library odbc
> > | (:windows (:or "odbc32.dll"))
> > | (t (:default "odbc32.dll")))
> > |
> > | (cffi:defcfun ("SQLAllocHandle" sql-handle) :short)
> > |
> > | (sql-handle)
> > `-----
>
> OK, yes, you need to load the library before the defcfun. Some lisps
> won't mind but others do. They'll all complain by the time the call to
> sql-handle is evaluated though.
>
> Why aren't you loading the library? What are you trying to accomplish?
> What am I missing?
I was trying to explain my first problem, but if it's assumed that
"some lisps won't mind" while others do, I guess the problem rolls
back to us, developers, to do the use-foreign-library.
About my second issue, I've come to the conclusion that this simple
example (below) works all-right, given that you call
use-foreign-library after loading the image (before calling the
foreign functions). This is what I find most annoying, since I have to
scoop through all 3rd party libraries for used dll's. Any chance to
make this work for clisp just like it does for (e.g.) ACL (i.e.,
without having to call use-foreign-library)?
,-----
| (asdf:operate 'asdf:load-op :cffi)
|
| (cffi:define-foreign-library odbc
| (:windows (:or "odbc32.dll"))
| (t (:default "odbc32.dll")))
|
| (cffi::use-foreign-library odbc)
|
| (cffi:defcfun ("SQLAllocHandle" sql-handle) :short)
|
| (format t "---------------Before loading image, dll call yelds:
~A!~%" (sql-handle))
|
| (ext:saveinitmem "test.exe"
| :init-function #'(lambda ()
| (cffi::use-foreign-library odbc)
| (format t "---------------After loading image, dll call
yelds: ~A!~%" (sql-handle))
| (ext:quit)
| )
| :NORC t
| :script t
| :executable t
| :quiet t)
| (ext:quit)
`-----
I'll try again making it work with my clsql project, and I'll post
back my success.