[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