C DLL 修饰名称导出
您已经注意到,当使用模块定义 (.def) 从 C DLL 导出函数名称时文件或 C 样式 extern "C" __declspec(dllexport) 语法,导出的函数名称会用附加信息进行修饰。这是由于 C 名称修饰所致,该过程将有关函数参数和类型的信息编码到函数名称中。
要删除此额外的装饰,可以使用 #pragma comment 编译器指令。通过将以下行添加到您的代码中:
#pragma comment(linker, "/EXPORT:SomeFunction=_SomeFunction@@@23mangledstuff#@@@@")
您可以为要导出的函数指定修饰名称。在本例中,“SomeFunction@@@23mangledstuff#@@@@”是函数“SomeFunction”的修饰名称。
或者,您可以使用以下编译指示自动生成修饰名称:
#pragma comment(linker, "/EXPORT:\"" __FUNCTION__ ""= "" __FUNCDNAME__)
此编译指示使用 FUNCTION 和FUNCDNAME 宏,用于将函数名称及其修饰版本插入到编译指示中。
使用这些编译指示中的任何一个将在使用 dumpbin.exe 查看时产生以下输出:
SomeFunction
此方法允许您保留导出函数的功能,同时删除函数名称中不需要的修饰。
以上是如何导出没有名称修饰的 C DLL 函数?的详细内容。更多信息请关注PHP中文网其他相关文章!