首页 > 后端开发 > C++ > 如何导出 C DLL 函数并避免修饰/损坏名称?

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

Linda Hamilton
发布: 2024-11-13 03:25:02
原创
732 人浏览过

How do I Export C   DLL Functions and Avoid Decorated/Mangled Names?

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__ "\"")
登录后复制

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

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

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板