[cffi-devel] calling a function of the same name from two DLLs

Robert P. Goldman rpgoldman at sift.info
Wed Dec 20 03:43:19 UTC 2006


Jack Unrue wrote:
> On 12/19/06, Luís Oliveira <luismbo at gmail.com> wrote:
>>
>> I've added this to the TODO list. I've also thought a little about how
>> to support this best, API-wise. Besides the obvious :LIBRARY (or some
>> other name) to DEFCFUN and friends it'd be nice if CFFI could infer
>> the "current library" somehow. An IN-FOREIGN-LIBRARY macro for
>> instance, though that might break when doing incremental development
>> with SLIME for instance.
> 
> Yeah, I see what you're getting at. Otherwise, I guess one has to encode
> context into the Lisp name of each function, sort of like I did in my
> DllGetVersion example.
> 
>> DEFINE-FOREIGN-LIBRARY could record the library name's symbol-package
>> and then DEFCFUN could look at *PACKAGE* to figure out which DLL to
>> use. That might be a silly idea.
> 
> I don't know about silly :-) but I would vote against that option if it
> were
> to be the only solution. Even though I can imagine use-cases where that
> might be reasonable, it's not a natural thing to do. C++ programmers are
> not required to declare a new namespace for each DLL that they use,
> for example.
> 
>> This kind of mechanism (either this last one, or an
>> IN-FOREIGN-LIBRARY, or
>> something else) would  also be useful for library-wide settings such
>> as stdcall vs. cdecl. That's actually the context in which I had
>> thought about this.
>>
>> I'm sure this kind of problem has been dealt with before in other
>> libraries (IIRC, five-am has an IN-SUITE macro). Any ideas?
> 
The package solution doesn't seem that silly to me --- an additional
namespace doesn't seem like a huge price to pay.  An alternative
encapsulation method would be to use CLOS and locate different entry
points relative to an object that corresponds to the library.  I guess
the choice would depend on whether you prefer namespaces or objects.

-- 
Robert P. Goldman
Senior Scientist
Smart Information Flow Technologies (d/b/a SIFT, LLC)

211 N. First St., Suite 300
Minneapolis, MN 55401

Voice:	(612) 384-3454
Email:    rpgoldman at SIFT.info



More information about the cffi-devel mailing list