This is the mail archive of the cygwin@cygwin.com mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: why use __stdcall?


On Wed, 16 Apr 2003, Lester Ingber wrote:
> When using Cygwin to produce DLLs for use in other software (Excel,
> TradeStation, Maple), etc., is it necessary to insert __stdcall between
> types/typedefs and function names?  I'm just considering vanilla C code
> that runs on all platforms I've tested.
> 
> If so, is it necessary to introduce __stdcall for all functions, or only
> those that are actually called by those utilities (and these call other
> C functions, etc.).  I.e., do I have to rewrite lots of good working C
> code to introduce __stdcall throughout all code?
No. Generally you can handle it with a couple of compiler flags and 
perhaps a well-written .def file.

> If I do not use __stdcall (I do not seem to need this for simple cases?),
> what dangers lurk?
Stack corruption.

What you need to is make sure that the calling convention used by your 
function is the same as the one expected by the calling program. A 
well-placed -mrtd will do the trick if you want the stdcall convention 
without the name mangling - this works for JNI DLLs and, I think, will 
probably work for Excel-invoked DLLs as well.

> To be explicit, I am creating DLLs and .def files using scripts like:
> set module = mydll
> gcc -c ${module}.c
    ^^^ add -mrtd here

> set old_lib = ${module}.o
> gcc -shared -mno-cygwin -o ${module}.dll \
>     -Wl,--out-implib=lib${module}.a \
>     -Wl,--export-all-symbols \
>     -Wl,--export-dynamic \
>     -Wl,--add-stdcall-alias \
>     -Wl,--enable-auto-import \
>     -Wl,--output-def=${module}.def \
>     -Wl,--whole-archive ${old_lib} \
>     -Wl,--no-whole-archive ${dependency_libs}
> 
HTH

rlc



--
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
Problem reports:       http://cygwin.com/problems.html
Documentation:         http://cygwin.com/docs.html
FAQ:                   http://cygwin.com/faq/


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]