如何在VC++中更改__stdcall的导出名称修饰?

gre*_*olf 5 c++ dll export name-decoration

这就是我现在宣布我的导出函数的方法:

extern "C" __declspec(dllexport)
Iexport_class* __stdcall GetExported_Class();
Run Code Online (Sandbox Code Playgroud)

当VS2008为此编译源代码时,生成的dll在其导出表下包含此内容:

_GetExported_Class@0
Run Code Online (Sandbox Code Playgroud)

为了与其他编译器兼容,我需要将上面的装饰看起来像这样:

GetExported_Class
Run Code Online (Sandbox Code Playgroud)

将调用约定更改为__cdecl将按照我想要的方式将其修饰,但约定是错误的,所以我不能使用它.我需要以__cdecl看起来的方式进行装饰,而是使用__stdcall.

无论如何使用.def文件吗?是否有一个开关或一个选项,我可以传递给link.exe链接器,可以使它按我想要的方式装饰导出名称?

谢谢

Pup*_*ppy 3

不。所有 __stdcall 名称都以这种方式修饰。我很惊讶你有一些其他编译器不会期望 __stdcall 导出像这样装饰。使用 .def 覆盖链接器几乎是您所能做的一切 - 除非您想在生产后更改 PE 文件。