如何禁用C ++ 7.1名称修改? :(

时间:2014-01-11 15:25:42

标签: c++ visual-c++ visual-studio-2003

我有一个用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)

为什么我会破坏功能名称?我需要在编译器选项中设置任何选项吗?

1 个答案:

答案 0 :(得分:1)

关键字_stdcall以及_cdecl_thiscall和其他关键字都是调用约定,指定编译器如何处理推送和弹出参数以及返回值。使用_stdcall创建的函数名称(至少在visual studio中)在导出时会“装饰”。如果要查找函数的导出名称,可以使用visual studio命令行函数DUMPBIN /EXPORTS "DLL file location"。您的函数名称可能如下所示:_FreeMyObject@(some number)。您也可以使用.def文件并自己定义名称,但我个人认为这很痛苦。