[cffi-devel] vararg
Frank Goenninger - PRION Consulting
fgoenninger at prion.de
Fri Jan 6 20:21:57 UTC 2006
Am 06.01.2006 um 12:41 schrieb James Bielman:
> Yaroslav Kavenchuk <kavenchuk at jenty.by> writes:
>
>>>> I do not know what library contains bad sprintf function.
>>>
>>> Maybe you can figure it out using (foreign-address
>>> #<foreign-function>) and see if you can relate that to the
>>> addresses of the .dll loaded into the current process?
>>
>> I have found it! This is ntdll.dll (in this library still more many
>> other functions). F&%k!
>>
>> It is caused from ole32.dll.
>>
>> win32 *.dll hell...
>>
>> Use CFFI with Windows without cpecification of library is
>> problematic :(
>
> Hmm, that sounds awful.
>
> What sort of interface should CFFI export for this? I've been
> reluctant to add this because several Lisps don't support it at all,
> but perhaps silently ignoring :LIBRARY options on those
> implementations and proceeding with the global lookup is okay for
> now...
This sounds OK for me, really.
> If we added an option syntax to DEFCFUN (I know everyone hates this
> syntax, but it's backwards compatible), we could have something like:
>
> (defcfun "sprintf" :int
> :library "msvcrt.dll"
> (fmt :string)
> ...)
Looks OK.
>
> If we want to break everyone and change the syntax of DEFCFUN, we can
> make it look like DEFCLASS:
>
> (defcfun "sprintf" :int
> ((fmt :string)
> ...)
> (:library "msvcrt.dll"))
Looks better.
>
> Or, for a completely different approach, what about:
>
> (with-default-library ("msvcrt.dll")
> (defcfun "sprintf" :int
> (fmt :string)
> ...))
Handy...
Let's do the Better and Handy approaches - just my vote. And yes, I
think it is OK to "break everyone" because we do version CFFI and
also because there's not that many CFFI based packages out there yet
(ouch - that might get some serious reponses ;-)
> Thoughts?
Yeah, these were mine. Glad someone works on this now. I really had a
hard time with these issues and would love to see a clean solution.
Thanks for your work and ideas.
Frank
More information about the cffi-devel
mailing list