0

由于特定需要,我需要创建一个 DLL,它导出以特定方式命名的函数,它也被破坏了。

?drawGdi@stop@234@@Z

有没有办法做到这一点?

4

2 回答 2

2

你可以这样做,但你必须编写一个 DEF 文件。

富.h:

extern "C" declspec(dllexport) void foo(int);

foo.def:

EXPORTS
    ?drawGdi@stop@234@@Z=_foo

_foo是函数的导出名称)。

当然,请记住在链接 DLL 时指定 DEF 文件。

有关详细信息,请参阅有关 DEF 文件的文档

于 2013-01-09T15:04:38.140 回答
1

你不能像例如声明你的函数吗

 class myclass;
 extern "C" void my_function(int,myclass&);

然后它应该被导出为my_function(至少在 Posix 系统上;我想在 Windows 上是一样的,但我不知道)。

如果使用 GCC 编译,您可以使用Asm Labels。那么汇编程序可以接受的任何名称都应该是可以的。

在具有 ELF 可执行文件的 Linux 上,您可能无法像 David Schwartz 建议的那样简单地编辑二进制文件(因为这可能会破坏 ELF 中用于符号的一些哈希表)。

于 2013-01-09T14:18:54.517 回答