"Stuart" <stu...@gmx.com> wrote in message 
news:hmapfdehxvvuuxswr...@forum.dlang.org...
> Hi. Is there any way to instruct the D compiler not to use name mangling 
> when referencing an external C++ function?
>
> For example:
>
>    extern (System) bool PathRenameExtension(LPSTR pszPath, LPCSTR pszExt);
>
> In this particular case, the exported function being referenced is not 
> called _PathRenameExtension@8 - it's just called PathRenameExtension. Now, 
> it's great that D helpfully mangles the name for me when appropriate, but 
> we really need some way to disable it when necessary.
>
> Is there any way to import this function without creating a .def file with 
> "_PathRenameExtension@8 = PathRenameExtension"? And if not, why not?

The problem isn't that D is mangling names it shouldn't, the problem is that 
your import library uses the wrong mangling for the internal names of 
imported symbols.  Using the .def file with implib is the correct solution, 
unless you want to try converting a coff import library to omf (I've never 
got that to work).  The reason implib needs a def file to work correctly is 
because only the exported name is stored in the dll, not the mangled name. 


Reply via email to