cURL / Mailing Lists / curl-library / Single Mail

curl-library

Re: libcurl using stdcall on windows

From: Jeff Phillips <jeff_at_jeffp.net>
Date: Thu, 24 Feb 2005 10:39:56 -0800 (PST)

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