gxqcn 发表于 2010-2-8 11:30:57

_VC80_UPGRADE=0x0600 起什么作用?

因有人反馈说 HugeCalc V8.0.0.0 无法在 VC2008 下编译通过,我决定测试一下。

通过双击\HugeCalc\testDLL\src\ANSI_C++\ansi_c++.dsp文件,系统自动弹出Microsoft Visual Studio 2008,提示是否转换工程,选择“是”;
编译,出错,提示<iostream.h>文件不存在,去掉“.h”这个后缀即可;
后再编译,出现一堆error,说“cout”等未声明,
在头文件后追加“using namespace std;”,一切OK。

这时,我去查工程属性,在“Command Line”属性页中有如下内容:/O2 /Ob1 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_VC80_UPGRADE=0x0600" /D "_MBCS" /GF /FD /EHsc /MD /Gy /Fp".\Release/ansi_c++.pch" /Fo".\Release/" /Fd".\Release/" /W3 /nologo /c /TP /errorReport:prompt

请问,这个"_VC80_UPGRADE=0x0600" 是起什么作用?
我试图查 MSDN,但未有说明。

gxqcn 发表于 2010-2-8 11:41:12

之所以提出此问,是因为有用户反映调用 HugeCalc V8.0.0.0 时会提示:

而我查得在VC6.0下,GetVerW的导出函数.def文件记录是:
?GetVerW@HugeCalc@@YAQBGXZ
怎么到Vc2008下就变成了:
?GetVerW@HugeCalc@@YAQB_WXZ

这就是说,两个编译器不兼容。
那么,加上 _VC80_UPGRADE=0x0600 是否就可以了呢?

mathe 发表于 2010-2-8 11:52:40

生成dll最好用c接口函数,这样编译器就不会再给函数名换名字了。

gxqcn 发表于 2010-2-8 12:04:41

标准C接口已经包含了,出问题的是C++接口。
我想在VC2008下编译一个空壳的DLL,得到对应的.lib文件,让用户替换VC6下的.lib文件,也许这样即可以解决问题?

mathe 发表于 2010-2-8 12:09:34

不知道:)
c++接口是比较麻烦的,跨编译器容易出问题的

风云剑 发表于 2010-2-8 12:35:39

这个宏的意思可能是表示从VC6升级而来。
如果原工程是VC2003的话,这个_VC80_UPGRADE=0x0710
但搞不清为什么宏是VC80,VC2008应该是VC90才对。

gxqcn 发表于 2010-2-8 13:06:51

我估计这个宏是从VC2005开始的,也许是通知编译器向后兼容。
页: [1]
查看完整版本: _VC80_UPGRADE=0x0600 起什么作用?