Vha*_*run 4 c++ dll export name-mangling
如何找出将分配给每个方法名称的装饰名称?我试图找出装饰名称是什么,以便我可以在DLL中导出它.
忘记.DEF文件.它们已成为过去.
通过__declspec(dllimport/dllexport)导出函数,无论是C函数还是C++符号.
如果您确实需要未修饰的名称,请按照Greg Hewgill的建议使用__declspec(dllimport/dllexport)关键字,结合extern"C",这将剥去他们装饰的符号......
有一些正当理由:您希望导出将由C代码使用的代码,或者您希望从使用不同编译器编译的模块中使用您的DLL.
由于第二个原因,我会为每个编译器生成一个DLL,并保留装饰.
除了这些原因,你为什么要删除装饰?
恰恰相反.
如果你正在使用一个编译器(我想你这样做,因为你想使用装饰的名称,而不是extern"C"),那么保持C++装饰/名称重整.
通过这种方式,您将能够使用完整的C++功能,即名称空间,类,函数/方法重载等.
尽管如此,使用符号装饰手动播放仍然是一种灾难:使用dllexport导出符号而无需处理另一个(.DEF)文件.
这个问题很相似:导出DLL C++类,关于.def文件的问题.快速摘要是您可能希望使用__declspec(dllexport)让编译器为您导出方法的工作.
Microsoft改变了它们对每个编译器版本进行函数名称修改(或称为"装饰名称")的方式,因此如果您尝试手动导出损坏的名称,可能会遇到未来的维护问题.如果你谷歌的"msvc装饰名称"有一些可能有帮助的链接,但没有保证.