On 7/22/2012 4:24 AM, Stuart wrote:
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?

extern(System) is extern(Windows) on Windows and extern(C) everywhere else.

extern(Windows) is stdcall, which is the Win32 API calling convention. stdcall function names are mangled to _funcName@N. So extern(System) is doing the right thing here.

What's odd is that your PathRenameExtension isn't mangled.

Reply via email to