On Saturday, July 21, 2012 21:56:36 Alex Rønne Petersen wrote: > On 21-07-2012 21:24, 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? > > Shouldn't you be using extern (Windows) ?
extern(System) should be fine in that it's the same as extern(Windows) on Windows, but since it's a Windows-specific function, it probably _should_ be using extern(Windows). Of course, since PathRenameExtensions does what std.path.setExtension does, it would probably be better to just use that, but the OP's question _does_ apply to other functions which may not have D replacements, so the question is still relevant. - Jonathan M Davis
