C++ 如何禁用C++;7.1名称损坏?:( 编写的库代码

C++ 如何禁用C++;7.1名称损坏?:( 编写的库代码,c++,visual-c++,visual-studio-2003,C++,Visual C++,Visual Studio 2003,我设法在VS2010中编译了它。现在我也需要在VS2003中编译它 问题是,我无法防止VS2003名称损坏 我在函数名之前使用了\uuuuudeclspec(dllexport)\uuuustdcall,我还将代码放在外部“C”块中 当我在VS 20003中编译它时,我仍然会弄乱函数名。当我使用u declspec(dllexport)时,我不需要.def文件,对吗 hee是代码: extern "C" { void __declspec(dllexport) __stdcall Fre

我设法在VS2010中编译了它。现在我也需要在VS2003中编译它

问题是,我无法防止VS2003名称损坏

我在函数名之前使用了\uuuuudeclspec(dllexport)\uuuustdcall,我还将代码放在外部“C”块中

当我在VS 20003中编译它时,我仍然会弄乱函数名。当我使用u declspec(dllexport)时,我不需要.def文件,对吗

hee是代码:

extern "C"
{

   void __declspec(dllexport) __stdcall FreeMyObject(MyObjectHandle pObj)
   {
    delete pObj;
   }
}
“Callin约定”也是cdecl(/Gd)


为什么我的函数名被弄乱了?我需要在编译器选项中设置任何选项吗?

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

它将被装饰为_FreeMyObject@4StDeCar修饰。与C++名字的不一样。它与C.不兼容。如果你想重命名它,那么你必须使用.DEF文件。谢谢,因为它是S。那么编译器在VS2010中的行为会有所不同吗?因为它在没有def文件的情况下工作得很好。顺便说一下,谢谢你的回答:)这种方式已经很长很长时间了。VS2010没有什么不同。唯一合理的猜测是您正在VS2010项目中构建64位代码。它不需要名字修饰,只有一个呼叫约定。你不会留下任何其他东西来猜测。这可能是一个没有C++ 7.1的副本,只有C++ 98, 03,11, 14, 17,20…