


























作者:马健
邮箱:stronghorse_mj@hotmail.com
主页:https://www.cnblogs.com/stronghorse
发布:2025.01.08
由于历史原因,我发布的免费软件基本上均以VC6为开发工具,其中仅有一小部分升级到了VC2019,全部升级的成本实在难以承受。所以我也算是VC6的资深用户,正好前段时间有网友问到在学校里用VC6碰到的一些问题,所以就在这里总结一些我个人使用VC6的经验,与各位分享。
我用过VC6和VC2008、2010、2012、2015、2019,与后面几个版本相比,我最喜欢VC6的地方是:
至于VC6在现代Windows版本下的安装,我自己试过Win7、Win10都没有问题,这方面上网搜一下就知道了。如果实在搞不定又必须使用VC6,还可以在XP SP3虚拟机里安装VC6,这个正常情况下都不会有什么问题。安装以后建议务必要打VS6 SP6补丁,这是VS6的最后一个补丁包。另外安装VC6时建议选择全部组件,包括Unicode编码支持和CRT、MFC的全部源代码。现代Window都是Unicode内核,但VC6缺省是不安装Unicode编码库的。有源代码则给跟踪调试带来极大的方便,顺便还可以学点高水平的源代码。
不过原版VC6毕竟比较老,总有这样那样的不便,但配合下面介绍的几个好帮手以后,以我的经验看会更好用一点。
一、MSDN Library和Windows SDK
MSDN Libray(一般习惯简称“MSDN”)是VC6的帮助文件,所以安装VC6而不装这个是不可想象的。原版VS6 Proffesional的6张安装光盘中,有两张就是MSDN。不过这个VC6专用版的MSDN是独立发行的1998年第2季度MSDN,即MSDN April 1998的子集,对Windows SDK的说明有点老。所以现在一般都不装VC6自带的MSDN,而是选择单独安装更高版本的MSDN。
能够与VC6适配的最后一版MSDN是2001年第4季度的版本,即MSDN October 2001。这个时候差不多是Windows XP发行的时候,所以这个版本的MSDN里有XP SDK的说明。不过坏消息是,这个版本的MSDN有一堆毛病,不折腾一下用起来会不舒服斯基。
(1)MSDN Oct 2001的空白页问题
这个版本的MSDN在XP下安装没事,如果在Win7、Win10下安装,SDK函数Shell_NotifyIcon等共12个页面会显示为空白。好消息是,这12个htm文件全部集中在shellcc.chm这一个文件里,就是简单的脚本语法错误。所以用HugeCHM拆分这个CHM文件,再用UltraEdi32的“文件替换”功能对拆分出来的htm文件进行批量文本替换以修正语法错误,最后重新用HugeCHM打包,覆盖原文件,即可修正所有空白页面。第一次修正这个错误的时候花了我几个小时,但如果再次进行修正,我可以在一分钟之内从头到尾全部搞定,所以真没什么技术含量。
2001年前几个季度的MSDN没有这个问题,包括我手上有的Jan 2001、July 2001,所以如果不想折腾这几个空白页,建议安装Oct之前的版本。
(2)MSDN Oct 2001的3CD版与1DVD版
MSDN Oct 2001提供两个版本,即1DVD版和3CD版,二者在帮助文件的内容上完全一样,也就是说,制作1DVD版的时候,其实就是简单把3CD版的文件全部放到一起,然后修改了光盘中\x86\Setup\msdn.stf文件中的几行,即安装过程中提示换盘的时候需要检查的光盘卷标号。1DVD版把3CD的卷标号都换成自家的卷标号,在安装的时候安装程序在检查点一看要求的卷标号的光盘已经加载,就不再提示换盘,直接读取文件进行安装。
但是在把MSDN Oct 2001安装到硬盘以后,如果安装时没有选择完全安装,而是缺了某些内容,那么在用到这些内容的时候,MSDN就会提示插入光盘以便读取所需的内容。但MSDN只会按照3CD版的盘号进行提示,也只认3CD的光盘,插入1DVD的没用。
所以如果没有折腾的能力或者心情,建议保留、安装3CD版的MSDN Oct 2001,而不是1DVD版。但奇怪的是,现在网上能找到的MSDN Oct 2001资源基本上都是1DVD版,3CD版近乎绝迹,但在本文之前我从来没有看到过任何帖子讨论本文所谈的修复技术,所以我只能认为要么是大家装MSDN的时候都是完全安装,要么是都只把它当做收藏品,而不是生产力工具。
言归正传,安装后MSDN提示要求插入光盘的情况主要有以下两种:
1)搜索过程中发现某些内容没有安装
例如,如果安装时没有勾选最后那项近630MB的“All other files”,则在MSDN主界面的“索引”页签中输入关键字“EDID”,然后点击列表中出现的EDID项,就会提示插入第3张光盘。插入DVD不认账。
解决办法:
2)重新运行C盘MSDN安装文件夹下的setup,补充安装以前没有安装的内容
这个时候也会提示插入安装光盘,而且也只会提示、读取3CD光盘,不认1DVD光盘。解决方案同上。只不过需要编辑的文件是
C:\Program
Files (x86)\Microsoft Visual Studio\MSDN\2001OCT\1033\Setup\setup.stf
在第113到116行,把3CD的卷标号全部替换成DVD的卷标号即可。
(3)MSDN Oct 2001中无关内容的清理
与VC6原配的低版本MSDN相比,高版本MSDN有一个无比讨厌的地方:大多数SDK函数都与WinCE的函数重名,所以查帮助的时候,经常会跳出对话框,让选择是查看WinCE还是查看Windows SDK,很不爽利。解决的办法也很简单:
MSDN Oct 2001中提供对Windows XP的开发说明,但是XP中的函数直接在VC6中调用,会出现“未定义”的错误,对此可以采用的解决方法包括:
二、Intel C Plus Plus Compiler
VC6是1998年发布的,对于C99标准仅为部分支持,造成的结果就是在编译采用STL的代码时,经常出错。如果不想放弃VC6,但又想好好用STL,解决办法之一就是安装与VC6 IDE兼容的第三方编译器。
我习惯使用的第三方编译器是Intel C Plus Plus Compiler(ICC),与VC6兼容的最高一个版本是v10.1.020。在安装VC6之后再安装ICC,可以在VC6的IDE里用选项勾选启用或停用ICC。如果启用,则C++编译器自动换成ICC,编译信息的输出还在VC6 IDE的Output窗口里,停用后则与原来的VC6一样。
我自己的体会,ICC除了对STL的支持比VC6更好,还有如下好处:
三、Visual Assist + WndTabs
VC6 IDE最被人诟病的地方就是太过古老,没有一些现在已经习以为常的功能,包括语法分色、自动完成、窗口分组等。安装了以上两个辅助软件以后,你会发现你的VC6 IDE有了质的变化。
我最喜欢Visual Assist的功能其实是它的Go功能,通过工具条上的下拉框可以快速定位CPP文件中的函数,插入光标在某个CRT或MFC函数上时,点击工具条上的Go按钮就可以跳转到这个函数的源代码(前提是安装VC6时选择安装了CRT和MFC的源代码),方便查看。
四、图标(icon)工具
用户看软件的第一眼,通常看到的是软件的图标,所以说“图标是软件的脸面”。但遗憾的是,VC6的图标编辑器只能创建、编辑256色的图标,这与现在流行的32位色图标有点差距。而且VC6自动生成的缺省图标只有32×32的像素尺寸,基本上只适用于Win 98/me/2000/XP,从Win7开始,资源管理器的“中等图标”就要求48×48,“大图标”、“超大图标”则要求256×256(理论上说“大图标”要求的是128×128像素的图标,但实际上如果你的图标最大尺寸只有128×128,在“大图标”下会被按照48×48的图标显示,必须要达到256×256,才能在“大图标”下满尺寸显示,所以128×128像素图标就是典型的“然并卵”)。
与图标编辑器不同的是,VC6的编译器对图标色彩没啥限制,支持对32位色的图标进行编译。所以只要能搞到合适的图标,对VC6自动生成的图标文件进行覆盖,就可以给自己的软件换上一个漂亮的图标,我自己就用过不少256×256像素的32位色图标。
图标的来源一般可以有以下几种:
如果想减小图标文件的长度,通常在图标文件中包含256×256、48×48像素尺寸的就好,甚至只有其中一个也可以。如果实在想兼容老系统,还可以包含32×32、16×16,别的都是然并卵。
如果256×256的图标实在不好找,可以:
五、Windows 源代码
这个不是必选项,但绝对是加分项。很多时候做Windows桌面软件开发,看帮助看得莫名其妙,只能追到最底层的Windows源代码里去一看究竟,这就是Linux作者Linus常说的“Talk is cheap, show me the code ”。另外多读一些高水平的源代码,也有助于增长见识,尤其是了解Windows的一些undocumented的事情。我的好几个软件,其实就是基于读Windows源代码的收获,如上面提到的资源扫描、抓取工具。
历史上Windows源代码曾经多次被泄露,最早是Windows 2000的,然后是XP、2003的,天知道什么时候就轮到Win7、Win10、Win11的(几年前很多网上新闻就说Win10源代码遭到泄露,但实际看过泄露出来的压缩文件就知道,it's a fake news!)。从代码组织上看,Win 2000的源代码组织略显混乱,不如XP、2003的组织得清晰有条理,而XP作为客户端,代码量比服务器端的2003要多一些,所以在有需要时我习惯上都是先查XP的源代码,查不到再查2003的源代码。
开源项目wine号称是Windows的平替,但是实际读过二者的源代码以后就会发现,双方的差距不是一星半点儿,所以很多Windows桌面端软件在wine下出现各种兼容性问题完全不值得奇怪。另外VC 2019通过单步跟踪,也可以进入部分Win7等高版本Windows API函数的源代码,但VC6完全没有这种好事,所以如果能下载完全的Windows源代码,还是尽量去下载一份备查。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。