yes, why @NN?!(was :Re: .def files for stdcall functions )
Jon Thackray
jont@harlequin.co.uk
Tue Sep 16 03:26:00 GMT 1997
Jon Thackray writes:
> J. Russell Smyth writes:
> > Colin Peters wrote:
> >
> > > My beef with all this is: why does GCC do it this way at all? What
> > > purpose
> > > does the @NN serve? After all, GCC knows how to generate the correct
> > > function call given a prototype, it *generates* the @NN, so it doesn't
> > >
> > > need it to know what to do. I don't think any other compilers add on
> > > @NN
> > > to the names of WINAPI functions like this. Why doesn't GCC just use
> > > the
> > > plain function name and call it with PASCAL calling convention?
> > > Someone
> > > please enlighten me.
> >
> > I too have wondered about this .. as I have been attempting to create
> > dll's that
> > can be used with other languages, mainly Visual Basic, I have found this
> > frustrating
> > and annoying! to create a dll for use with VB and gcc, I must create all
> > functions with
> > the @NN and alias all of them to non-@NN names for VB! One quickview of
> >
> > ANY M$ dll shows that microsofts dll's do not contain this info, where
> > cygwin does,
> > causing great grief for other-language-programmers.
> >
> > This problem is also encountered with LCC which I use extensively...
>
> This isn't really a GCC thing. Microsoft produced the @nn stuff to
> indicate the stack usage of procedures which are called by the pascal
> calling convention, since such procedures clean their own stacks
> before returning (using the carefully provided ret n instruction on
> the x86 architectures). Since the callee rather than the caller is
> cleaning the stack, even though the callee created the stack, it is
caller
> important that they agree on how much stack should be cleaned. This is
> the bit gcc is doing. Now, I suspect that the problem you have is the
> dll export and import tables don't match up, because one has the @nn
> stuff in it and one doesn't. This isn't a link time issue, it's a load
> time issue, and apart from convention, there's no reason for the
> symbols in the export tables to bear any textual relationship to the
> link time names of the functions they refer to. Indeed, link time
> symbols of the form _foo@nn are typically translated into load time
> references of the form foo, ie a leading _ and the trailing @nn are
> stripped. This can lose the safety of being sure you don't call foo@mm
> as though it were foo@nn. Anyway dlltool, which creates the export and
> import tables, has an option (-k) to strip the trailing @nn. You
> probably need to use this somewhere.
> -
> For help on using this list (especially unsubscribing), send a message to
> "gnu-win32-request@cygnus.com" with one line of text: "help".
-
For help on using this list (especially unsubscribing), send a message to
"gnu-win32-request@cygnus.com" with one line of text: "help".
More information about the Cygwin
mailing list