这就是我目前声明的出口功能的方式:

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文件方式几乎是唯一的解决方案。

是的:

你可以加 /EXPORTlib.exe 命令行或添加 #pragma 到您的源文件:

#pragma comment(linker, "/EXPORT:SomeFunction=_SomeFunction@@@23mangledstuff#@@@@")

甚至更容易:在功能的主体内部使用

#pragma comment(linker, "/EXPORT:" __FUNCTION__ "=" __FUNCDNAME__)

资源: https://stackoverflow.com/a/2805560/280534

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top