[Zlib-devel] RE: [png-implement] Binary-incompatible change in the DLL interface of zlib

Gerard Juyn gerard at datapartners.nl
Tue Jul 29 08:44:02 EDT 2003


> __stdcall doesn't work with varargs, it is not part of the C standard,
> it is only used in Windows (not in Linux, BSD or whatever). The only
> reason I see is that it is demanded in the older Visual Basic, but this
> sole reason is something that I already knew.

Valid point. I guess I was being nostalgic. I've had problems with porting my 
Delphi-code to Kylix and having to conditionally define all the STDCALL 
conventions along with conditional CDECL conventions. Quite the pain in the 
lower back. Unfortunately I can't go back. I will have to stick to STDCALL.

> Mixing __cdecl with __stdcall can be done by circumventing or otherwise
> avoiding the internal name mangling, but that would mean replacing
> link-time errors with run-time errors.

You've made a good case. I finally read your FAQ before blabbering any more 
comments. The only thing I personally find undesirable is having it linked 
against some external runtime library. Again you've got a good case there, but 
I just have a bad feeling about something like that. It's not uncommon for MS to 
modify these in incompatible ways.

Why not compile without this dependancy? If MSVC or MingW can't do it, use 
another tool. *You* (or someone else, but just *1* origin) should be the sole 
distributor of the standard DLL. This is something you should make more 
clear. Really discourage anyone to build their own 'standard' version. There 
should be just *1* source. And then it doesn't matter which compiler you use. 
That *is* the beaty of DLLs (probably the only one :)

This way you could also 'expand' the standard DLL with a separate STDCALL 
API specifically for older VB. Eg. add all functions with a vb_ prefix or _vb 
suffix or something and include a VB include file that does the magic 
translation. A single standard DLL with everybody happy.... Of course you 
can also leave that out until someone begs for it.

Anyway, the only real advice (that you probably know already) is that you do 
have to work out the best strategy you can think of right now, and then stick 
with it for at least a decade. And make sure there's only ONE (1) source of 
the DLL!!!!

I'll follow your progress, and if its satisfactory I may decide to link the 
standard libmng.dll against your standard zlib.dll
But again unfortunately, anyone using libmng.dll's zlib functions will have 
linked against STDCALL. I'd have to go the same way as you and create a 
libmng2.dll

We might even consider creating a bundle with zlib, libpng, lcms and libmng. 
Having a special Windows installer may help to expedite acceptance too. Just 
another idea....

Gerard

(at 6 eurocents now... :)

Gerard Juyn
gerard at datapartners.nl
www.datapartners.nl




More information about the Zlib-devel mailing list