curl-library
RE: libcurl using stdcall on windows
From: Gonzalo Diethelm <gonzalo.diethelm_at_aditiva.com>
Date: Thu, 24 Feb 2005 15:51:18 -0300
Date: Thu, 24 Feb 2005 15:51:18 -0300
Suggestion: use a pre-processor macro that:
* expands to nothing on non-Windows platforms
* expands to cdecl on Windows by default
* can be redefined by the user to be something else (stdcall) at compile
time
Regards,
-- Gonzalo Diethelm gonzalo.diethelm_at_aditiva.com > -----Original Message----- > From: curl-library-bounces_at_cool.haxx.se > [mailto:curl-library-bounces_at_cool.haxx.se] On Behalf Of Jeff Phillips > Sent: Thursday 24 February 2005 15:40 > To: CL; Jeff Phillips > Cc: libcurl development > Subject: Re: libcurl using stdcall on windows > > > Hello Calu, > > I don't know if the libcurl team will want to put more > Windows-specific conditional code into the header files. > > For my part, I tend to build my C/C++ apps and DLLs > with __cdecl (/Gd) and explicitly place __stdcall on > those functions that require that convention, such as > those that I might want to export to VB. > > Take care, > Jeff > > --- CL <jscript_at_gmail.com> wrote: > > > Thanks for the feedback. That certainly led me back > > on track again. > > In addition to adding __cdecl to the callback > > function, I also > > explictly placed __cdecl on all functions that I > > called in > > <libCurl.h>. Considering that libCurl always uses > > __cdecl calling > > convention, should this change be included in the > > latest CVS version > > so that others building Win32 applications with > > __stdcall doesn't run > > into the same problem? > > > > Calu > > > > > > > > On Thu, 24 Feb 2005 08:07:52 -0800 (PST), Jeff > > Phillips <jeff_at_jeffp.net> wrote: > > > Hello CL, > > > > > > I don't recommending building libcurl with the > > stdcall > > > convention, because you won't be able to invoke > > > libcurl's vararg functions (like dfprintf_format > > and > > > curl_formadd) if you do this. > > > > > > That said, when you rebuild libcurl as cdecl, the > > > trick will be to ensure that the various libcurl > > > callbacks in your application are declared as > > cdecl > > > rather than stdcall, because libcurl, when > > compiled as > > > cdecl, will expect to clean the stack after > > invoking a > > > callback. So here's an example: > > > > > > size_t __cdecl write_function(char* szptr, > > > size_t sz, size_t nmemb, void* pvData) > > > { > > > return sz * nmemb; // for now > > > } > > > > > > Set up this callback with: > > > > > > curl_easy_setopt(easy, CURLOPT_WRITEFUNCTION, > > > write_function); > > > > > > Hope this helps, > > > Jeff > > > > > > --- CL <jscript_at_gmail.com> wrote: > > > > > > > I'm trying to add libcurl to an existing windows > application that > > > > must uses stdcall calling convention. I've added /Gz > > > > (stdcall rather than > > > > cdecl ) to CCDEBUG and CCNODBG in makefile.vc6. > > Most > > > > of the souce code > > > > compiled without warning/errors after adding > > this > > > > flag. I'm only > > > > getting 4 errors that complains pretty much on > > the > > > > same problem: > > > > > > > > error C2152: 'function' : pointers to functions > > with > > > > different attributes > > > > warning C4024: 'dprintf_formatf' : different > > types > > > > for formal and > > > > actual parameter 2 > > > > error C2152: 'function' : pointers to functions > > with > > > > different attributes > > > > warning C4024: 'dprintf_formatf' : different > > types > > > > for formal and > > > > actual parameter 2 > > > > error C2152: 'function' : pointers to functions > > with > > > > different attributes > > > > warning C4024: 'dprintf_formatf' : different > > types > > > > for formal and > > > > actual parameter 2 > > > > error C2152: 'function' : pointers to functions > > with > > > > different attributes > > > > warning C4024: 'dprintf_formatf' : different > > types > > > > for formal and > > > > actual parameter 2 > > > > > > > > I'm pretty new to libcurl, and it took nearly > > the > > > > whole day yesterday > > > > for me to figure out the 'unresolved external > > symbol > > > > __imp__curl*' > > > > errors was related to this mix use of calling conventions. I > > > > appreciate if anyone can point me in the right > > > > direction in either: > > > > 1. how to mix cdecl and stdcall in the same > > > > application > > > > 2. what type of changes do I have to make to fix > > > > those errors listed here > > > > > > > > TIA > > > > > > > > calu > > > > > > > > > > > > > > >Received on 2005-02-24