preloader image
如何导出 C DLL 函数并避免修饰/损坏名称?

如何导出 C DLL 函数并避免修饰/损坏名称?

C DLL 导出:了解修饰/修饰名称

创建 C DLL 并导出其函数是一项常见任务。但是,确定导出名称的显示方式可能会令人困惑。

修饰/修饰名称

使用模块定义文件 (MyDLL.def) 导出函数时,您可能会观察到修饰或修饰名称,例如“ SomeFunction@@@23mangledstuff#@@@@"。发生这种情况是因为 C 编译器通过添加 C 运行时所需的信息来装饰函数符号。

使用 C 样式导出

使用 extern "C" __declspec(dllexport) 语法导出函数不会不消除修饰名称。它仅指定函数应具有 C 风格的名称,但装饰保留。

解决方案

要缓解此问题,请考虑使用 pragma 指令:

#pragma comment(linker, "/EXPORT:SomeFunction=_SomeFunction@@@23mangledstuff#@@@@")登录后复制

此编译指示指示链接器使用指定的修饰名称导出“SomeFunction”。

替代解决方案

或者,您可以在函数体内使用以下编译指示:

#pragma comment(linker, "/EXPORT:\"" __FUNCTION__ "\"=\"" __FUNCDNAME__ "\"")登录后复制

此编译指示使用 FUNCTION 和 FUNCDNAME 宏来自动检索函数名称和装饰名称。

通过使用这些编译指示,您可以控制装饰导出符号,确保从 C# 等其他语言调用它们时的兼容性。

以上是如何导出 C DLL 函数并避免修饰/损坏名称?的详细内容。更多信息请关注PHP中文网其他相关文章!

Copyright © 2088 下一次世界杯_世界杯巴 - xbpifu.com All Rights Reserved.
友情链接