This is the mail archive of the fortran@gcc.gnu.org mailing list for the GNU Fortran 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: creating dll to link with delphi program


Dear Brad,

On 10/24/2011 09:00 PM, Brad Finney wrote:
The leading _ is added there because the ABI (application binary
interface) of 32bit Windows *requires* it. If you don't like it, blame
Microsoft.

There seems to be an additional detail, which I had overlooked: For symbols in DLLs, there seem to be different rules. - And Delphi seems to have use some extra convention in addition.


To quote Danny: "DLLs built with MS-Windows tools use different default rules for the naming of __stdcall function names in export table: for stdcall symbols the string in the dll's export table has the assembler prefix '_' prepended, while for cdecl symbols or variable names, the underscore prefix is stripped. In contrast, in dlls built with GNU tools, the assembler underscore prefix is stripped from all symbols by default."
From: http://cygwin.com/ml/binutils/2006-03/msg00086.html


Searching different webpages, I have not really found a really helpful explanation or rules. When generating a DLL, one can (cf. link above) modify the mangling either by flags or by the .def file.

For interaction with DLLs, you might also want to use DLLEXPORT/DLLIMPORT, though those do not seem to change the mangling. (dllimport of "foo" imports __imp__foo (cdecl) or __imp__foo@0 (stdcall); dllexport has _foo and _foo@0). Though, as written, when linking one can modify the mangling by the dlltools/linker.

In any case, "underscore DLL prefix" (and variants) will turn up hundreds of web pages, where people have similar issues - independent of the compiler.

See also:
http://mirrors.zoreil.com/webclub.kcom.ne.jp/ma/colinp/win32/dll/make.html
and http://www.willus.com/mingw/yongweiwu_stdcall.html

Tobias,
who is rather confused and praises the Win64 and Unix (default) calling conventions.



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