'NIF_INFO' was not declared in this scope
'NIF_INFO' was not declared in this scope

农历蛇年来临之际,我于昨天回家过年,并且继续开展学习计划,分别是开发Alipay for WP-e-Commerce和自学C++ & Windows API。听说家里的电脑不能启动了,我估计是内存松了,拆开机箱一看,果不其然,于是三下五除二修好了电脑,并到对面阿姨家装好了WIFI路由器,一切准备工作就绪。

好了,开始整理学习环境,首先,需要假设自制的QWAMP Server,将打包带来的QWAMP Server x64解压到F盘的qwamp目录,解压的过程中恍然大悟,武汉的电脑系统是Win8 Pro 64bit,家里的是Win8 Pro 32bit,整个核心及启动程序都需要更换。为了不浪费时间,我一边看最新一集的美剧《生活大爆炸》一边下载32bit的Apache2、PHP5和MySQL5以及32bit的Dev C++,看完电视剧,程序也下载完毕并解压到QWAMP相应的目录中,设置好各自的配置文件,接下来就是编译QWAMP的32位启动程序了。

不知道用于64位应用程序的源代码能否在32位环境下直接编译,我怀着一探究竟的乐观主义精神用32位Dev c++打开了QWAMP项目,按F9编译,每过几秒钟,编译器刷的给我返回一堆错误,所有的错误都是关于NOTIFYICONDATA托盘图标API的,头一个错误就是:

"NIF_INFO"was not declared in this scope

这种错误一般都是指变量、宏或常量未定义,但是我明明在shellapi.h里看到有#define NIF_INFO 0x00000010,不过这个常量被包含在一个if条件语句里:

#if (_WIN32_IE >= 0x0500)
#define NIF_INFO	0x00000010
#endif

从字面上理解就是当IE的版本大于或等于5.0的时候,定义NIF_INFO为0x00000010,我的IE版本为10,所以这个表达式的值应该是TRUE的。
下面还有一系列的变量未定义,我先将所有的条件语句都去掉,按F9,编译成功。

现在,我需要研究一下这个到底是怎么回事了。

试着输出一下_WIN32_IE的值,显示_WIN32_IE未定义,好奇怪,为什么编译64位程序的时候没有出现这种情况,我还原了shellapi.h的内容,在main.cpp的头部加上:

#define _WIN32_IE 0x1000
#define _WIN32_WINNT 0x602

按F9编译成功……一个念头涌上心头,我代表全国人民讨厌Dev c++ 32bit。还是Dev c++的64位版本更完善,32位版本连多国语言都没有。

编译好的程序文件大小足足小了一倍,这就是32位和64位之间的区别吗?

[information]

Dev c++这种轻量级的IDE用来学习还是不错的,但是用做开发还是很不方便,接下来的计划是安装MS VS2012、Eclipse C/C++、QT creator试试,我将从重选择一款,目前来说比较看好QT creator,因为QT的跨平台是我的学习方向。

[/information]

喜欢这篇文章吗,不妨分享给朋友们吧!