由于特定需要,我需要创建一个 DLL,它导出以特定方式命名的函数,它也被破坏了。
?drawGdi@stop@234@@Z
有没有办法做到这一点?
你可以这样做,但你必须编写一个 DEF 文件。
extern "C" declspec(dllexport) void foo(int);
EXPORTS
?drawGdi@stop@234@@Z=_foo
(_foo
是函数的导出名称)。
当然,请记住在链接 DLL 时指定 DEF 文件。
有关详细信息,请参阅有关 DEF 文件的文档。
你不能像例如声明你的函数吗
class myclass;
extern "C" void my_function(int,myclass&);
然后它应该被导出为my_function
(至少在 Posix 系统上;我想在 Windows 上是一样的,但我不知道)。
如果使用 GCC 编译,您可以使用Asm Labels。那么汇编程序可以接受的任何名称都应该是可以的。
在具有 ELF 可执行文件的 Linux 上,您可能无法像 David Schwartz 建议的那样简单地编辑二进制文件(因为这可能会破坏 ELF 中用于符号的一些哈希表)。