"Jack Unrue" jdunrue@gmail.com writes:
Hello, CFFI folks. What are the implications of declaring two foreign functions, each foreign name being the same but which are implemented in two separate DLLs? The specific case I have in mind is the Win32 function DllGetVersion, which can return different meta-data for comctl32.dll vs. shell32.dll.
(load-foreign-library "comctl32.dll")
(defcfun ("DllGetVersion" comctl-dll-get-version) HRESULT (info :pointer))
(load-foreign-library "shell32.dll")
(defcfun ("DllGetVersion" shell-dll-get-version) HRESULT (info :pointer))
For SBCL 1.0 at least both will be backed by the same foreign function, namely the first one to be loaded.
The Right Thing, I believe, would be something like
(load-foreign-library "foo.dll" :name :foo)
(defcfun ("FooFun" foo-fun :library :foo) ...)
which would not be too hard to support on the SBCL end of things at least.
Cheers,
-- Nikodemus Schemer: "Buddha is small, clean, and serious." Lispnik: "Buddha is big, has hairy armpits, and laughs."