C/ c++以一种特定的方式管理输出

C/C++ mangle exports in a specific way

本文关键字:方式 输出 管理 一种 c++      更新时间:2023-10-16

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

?drawGdi@stop@234@@Z

有办法做到这一点吗?

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

<标题> foo:
extern "C" declspec(dllexport) void foo(int);
<标题> foo.def:
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标签。那么汇编程序可以接受的任何名称都可以。

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