cURL / Mailing Lists / curl-library / Single Mail

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

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