如何更改VC ++中__STDCALL的导出名称装饰?
-
12-10-2019 - |
题
这就是我目前声明的出口功能的方式:
extern "C" __declspec(dllexport)
Iexport_class* __stdcall GetExported_Class();
当VS2008编译了此源时,生成的DLL包含在其导出表下方:
_GetExported_Class@0
为了与其他编译器兼容,我需要上述装饰才能像这样:
GetExported_Class
将呼叫惯例更改为__cdecl会将其装饰到我想要的方式上,但是该约定是错误的,所以我不能使用它。我需要按照__cdecl的外观来装饰它,而是使用__stdcall。
无论如何要这样做 没有 使用.def文件?我可以将开关或选项传递给link.exe链接器,可以使其装饰到我想要的方式的导出名称?
谢谢
解决方案
否。所有__ stdcall名称均以这种方式装饰。我很惊讶您还有其他一些编译器,这些编译器不会期望__ -stdcall出口会像这样装饰。用.def覆盖链接器几乎是您所能做的 - 除非您想在生产后更改PE文件。
其他提示
我不明白为什么您不想使用.def文件,但这是您唯一的选择。
链接器支持导出开关,但不能与__ stdcall注释的函数一起使用:
http://msdn.microsoft.com/en-us/library/7k30y2k5.aspx
DEF文件方式几乎是唯一的解决方案。
是的:
你可以加 /EXPORT
到 lib.exe
命令行或添加 #pragma
到您的源文件:
#pragma comment(linker, "/EXPORT:SomeFunction=_SomeFunction@@@23mangledstuff#@@@@")
甚至更容易:在功能的主体内部使用
#pragma comment(linker, "/EXPORT:" __FUNCTION__ "=" __FUNCDNAME__)
不隶属于 StackOverflow