我有一个用VS 2003,C ++ 7.1
编写的库代码我设法在VS 2010中编译它。现在我需要在VS2003中编译它。
问题是我无法阻止VS2003名称破坏!
我在函数名之前使用了 __ declspec(dllexport)__stdcall ,我也将代码放在extern“C”块中。
当我在VS 20003中编译时,我仍然会遇到损坏的函数名。当我使用__declspec(dllexport)时,我不需要.def文件吗?
嘻嘻是代码:extern "C"
{
void __declspec(dllexport) __stdcall FreeMyObject(MyObjectHandle pObj)
{
delete pObj;
}
}
“Callin Convention”也是__cdecl(/ Gd)
为什么我会破坏功能名称?我需要在编译器选项中设置任何选项吗?
答案 0 :(得分:1)
关键字_stdcall
以及_cdecl
,_thiscall
和其他关键字都是调用约定,指定编译器如何处理推送和弹出参数以及返回值。使用_stdcall创建的函数名称(至少在visual studio中)在导出时会“装饰”。如果要查找函数的导出名称,可以使用visual studio命令行函数DUMPBIN /EXPORTS "DLL file location"
。您的函数名称可能如下所示:_FreeMyObject@(some number)
。您也可以使用.def文件并自己定义名称,但我个人认为这很痛苦。