VC6的几个好帮手

news/2025/1/8 16:12:16/文章来源:https://www.cnblogs.com/stronghorse/p/18659985

作者:马健
邮箱:stronghorse_mj@hotmail.com
主页:https://www.cnblogs.com/stronghorse
发布:2025.01.08

由于历史原因,我发布的免费软件基本上均以VC6为开发工具,其中仅有一小部分升级到了VC2019,全部升级的成本实在难以承受。所以我也算是VC6的资深用户,正好前段时间有网友问到在学校里用VC6碰到的一些问题,所以就在这里总结一些我个人使用VC6的经验,与各位分享。

我用过VC6和VC2008、2010、2012、2015、2019,与后面几个版本相比,我最喜欢VC6的地方是:

1、条件断点。在VC6中下断点以后,可以设定断点条件,只有在断点条件成立时才会触发断点。比如说在循环体内下断点,可以设置循环变量达到多少时才触发断点。这个功能在后面的VC版本中被取消了,带来很大的麻烦。我在VC6中抓内存泄露(memory leak)就全靠这个功能。
2、在VC6的Class Wizzard功能中把对话框控件映射成变量时,变量类型是从下拉列表框中选择,而不是像后续的版本那样就提供一个光溜溜的编辑框,纯让用户手输。这个功能对初级用户特别重要,因为刚开始谁知道能映射成哪些类型的变量?就算是老用户,有时候凭空手输也会觉得没底,不如从列表框选择那么踏实。

至于VC6在现代Windows版本下的安装,我自己试过Win7、Win10都没有问题,这方面上网搜一下就知道了。如果实在搞不定又必须使用VC6,还可以在XP SP3虚拟机里安装VC6,这个正常情况下都不会有什么问题。安装以后建议务必要打VS6 SP6补丁,这是VS6的最后一个补丁包。另外安装VC6时建议选择全部组件,包括Unicode编码支持和CRT、MFC的全部源代码。现代Window都是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在XP下安装没事,如果在Win7、Win10下安装,SDK函数Shell_NotifyIcon等共12个页面会显示为空白。而好消息是,这12个htm文件全部集中在shellcc.chm这一个文件里,就是简单的脚本语法错误。所以用HugeCHM拆分这个CHM文件,再用UltraEdi32的“文件替换”功能对拆分出来的htm文件进行批量文本替换以修正语法错误,最后重新用HugeCHM打包,覆盖原文件,即可修正所有空白页面。第一次修正这个错误的时候花了我几个小时,但如果再次进行修正,我可以在一分钟之内从头到尾全部搞定,所以真没什么技术含量。

MSDN Oct 2001中提供对Windows XP的开发说明,但是XP中的函数直接在VC6中调用,会出现“未定义”的错误,对此可以采用的解决方法包括:

1、手工在StdAfx.h的开始处加上一行:
#define _WIN32_WINNT 0x0500
即强制指定编译后的目标EXE只能在Windows 2000及其以上的平台中运行。VS6中其实已经包含了部分Windows 2000 SDK,但是因为VC6自动生成的StdAfx.h中没有对_WIN32_WINNT进行定义,所以限制了只能使用Win98 SDK。不信可以在安装文件夹的VC98\Include\WINBASE.H文件中搜索_WIN32_WINNT,就可以看到一堆的条件编译。
2、如果要求使用Windows XP、2003(XP的服务器版)中的SDK函数,可以安装Windows Platform SDK(PSDK)。能够与VC6匹配的最高一版是Windows Server 2003 PSDK February 2003,网上有下载地址、安装和配置方法。安装后在VC中就能直接调用全部Windows 2003的SDK函数。
3、如果要求调用Win7、Win10下的SDK函数,就只能用LoadLibrary、GetProcAddress手工加载了。

二、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更好,还有如下好处:

1、支持OpenMP,VC要到VC2008才支持。不过按照Intel的说明,OpenMP只能使用动态库,不能使用静态库,我猜是可能引发线程风暴。
2、对语法检查更严格,有些用原版VC6编译时没有暴露出来的错误,用ICC编译就可能暴露出来。
3、据说经过编译选项优化后,编译出来的目标代码更快,毕竟CPU就是它自家产的,编译器支持的指令集比VC6更丰富。不过我没有做过严格的benchmark测试,所以只能是“据说”。

三、Visual Assist + WndTabs

VC6 IDE最被人诟病的地方就是太过古老,没有一些现在已经习以为常的功能,包括语法分色、自动完成、窗口分组等。安装了以上两个辅助软件以后,你会发现你的VC6 IDE有了质的变化。

我最喜欢Visual Assist的功能其实是它的Go功能,通过工具条上的下拉框可以快速定位CPP文件中的函数,插入光标在某个CRT或MFC函数上时,点击工具条上的Go按钮就可以跳转到这个函数的源代码(前提是安装VC6时选择安装了CRT和MFC的源代码),方便查看。

、Windows 源代码

这个不是必选项,但绝对是加分项。很多时候做Windows桌面软件开发,看帮助看得莫名其妙,只能追到最底层的Windows源代码里去一看究竟,这就是Linux作者Linus常说的“Talk is cheap, show me the code ”。另外多读一些高水平的源代码,也有助于增长见识,尤其是了解Windows的一些undocumented的事情。我的好几个软件,其实就是基于读Windows源代码的收获。

历史上Windows源代码曾经多次被泄露,最早是Windows 2000的,然后是XP、2003的,天知道什么时候就轮到Win7、Win10、Win11的。从代码组织上看,Win 2000的源代码组织略显混乱,不如XP、2003的组织得清晰有条理,而且代码这种事情一般是喜新厌旧,所以在有需要时我习惯上都是先查2003的源代码。

开源项目wine号称是Windows的平替,但是实际读过二者的源代码以后就会发现,双方的差距不是一星半点儿,所以很多Windows桌面端软件在wine下出现各种兼容性问题完全不值得奇怪。另外VC 2019通过单步跟踪,也可以进入部分Win7等高版本Windows的源代码,但VC6完全没有这种好事,所以如果能下载完全的Windows源代码,还是尽量去下载一份备查。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/865940.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Tita OKR 应用技巧:OKR 评分

OKR 评分价值 OKR(目标与关键成果)评分主要有以下几方面价值: 一、目标管理方面明确目标完成程度OKR评分可以直观地展现目标的达成情况。例如,一个产品团队设定了提升用户满意度的目标,通过OKR评分,可以清楚地看到用户满意度指标从初始的60%提升到了75%还是80%等具体数值…

ArmSoM RK3588/RK3576核心板,Rockchip Display 使用

1. Display简介​ RK3588 的VOP (video output process)分为4个Port:port分辨率VP0 4KVP1 4KVP2 4KVP3 1080PRK3588 VP 和各显⽰接口的连接关系: 需要注意的是,RK3588 的 HDMI 和 DP ⽀持 8K 输出,但是在 8K 输出模式下,⼀个显⽰接口需要同时占⽤ VP0 和 VP1 。所以如果产…

JNI接口--实现Java调用C++

1、JNI原理概述 通常为了更加灵活高效地实现计算逻辑,我们一般使用C/C++实现,编译为动态库,并为其设置C接口和C++接口。用C++实现的一个库其实是一个或多个类的简单编译链产物,然后暴露其实现类的构造方法和纯虚接口类。这样就可以通过多态调用到库内部的实现类及其成员方法…

Leaflet 实现离线瓦片资源 + 飞线迁徙 + 自定义标记点位实现

npm install leaflet 注意构建webpack配置module: {rules: [{test: /\.(png|jpg|gif|jpeg|svg)$/,include: /node_modules[\\/]leaflet/,use: [{loader: url-loader,options: {outputPath: static/images}}]}] } 注意外部资源代理方式proxy: {/cdn: {target: https:// + ip + :…

Training Transformers with 4-bit Integers

目录概符号说明4-bit FQTLearned Step Size QuantizationHadamard QuantizationBit Splitting and Leverage Score Sampling代码Xi H., Li C., Chen J. and Zhu J. Training transformers with 4-bit integers. NeurIPS, 2023.概 本文针对 4-bit 中训练中一些特点 (针对 transf…

python SQLAlchemy ORM——从零开始学习 02简单的增删查改

02 简单的增删查改 前情提要:承接了01中的engine以及User类 2-1 了解会话机制个人理解 在SQLAlchemy 增删查改中是依赖会话(Session)这个机制进行操作的,我个人的理解是用“会话“进行连接数据库周期的一系列管理操作(以下是ai生成对此会话的理解)ai理解 在 SQLAlchemy 中…

YASKAWA机械手维修DX100示教器通电无反应

安川机器人DX100示教器通电无反应可能由多种原因导致,以下是一些常见的原因及对应的解决方法:可能原因电源问题:电源线破损或电源插座接触不良。 硬件故障:示教器内部电路板或元件(如内存条、处理器或显示屏等)损坏。 软件问题:软件发生错误或版本不匹配。 其他故障:…

春节电商爆单背后的协作黑科技!

每到春节,电商平台的交易额都会迎来新一轮爆发。但你是否思考过,支撑这一庞大运作的团队如何在高压之下确保高效协作?答案或许就藏在你忽略的细节里:在线文档协作。 春节购物高峰的背后:团队协作挑战重重 春节期间,消费者习惯于提前囤年货、抢促销,购物高峰往往集中爆发…

Transformer、编码器、解码器、全连接FFN、自注意力机制、嵌入向量、残差连接层归一化

一.提出背景 Transformer最早是Google在2017年的Attention Is All You Need论文中提出,用于解决解决传统的序列到序列(Seq2Seq)模型在处理可变长序列时遇到的问题。(序列到序列:指的是模型的输入是一段序列,模型输出也是序列;比如语音识别中给模型一段中文语音序列,让模…

JS-22 字符串的方法_concat()

concat方法用于链接两个字符串,返回一个新字符串,不改变原字符串 var s1=zifuchuan var s2=tow s1.concat(s2)//"zifuchuantow" s1//"zifuchuan" 该方法可以接受多个参数 two.concat(zifuchuan,three)//"zifuchuanthreetwo" 如果参数不是字符串…

年货抢购狂潮来袭,协作效率如何提升?

每年春节,都是电商企业竞争最激烈的战场。从年前的大促销到年后的物流爆单,作为电商团队的一员,你是否为节日期间高强度的工作节奏而焦虑?特别是在跨部门协作时,沟通不畅、任务延误、文档混乱等问题是否成为了团队效率的致命瓶颈? 在这一背景下,在线文档协作成为了提升春…

ASE100N10-ASEMI中低压N沟道MOS管ASE100N10

ASE100N10-ASEMI中低压N沟道MOS管ASE100N10编辑:ll ASE100N10-ASEMI中低压N沟道MOS管ASE100N10 型号:ASE100N10 品牌:ASEMI 封装:TO-220 批号:最新 最大漏源电流:100A 漏源击穿电压:100V RDS(ON)Max:8.8mΩ 引脚数量:3 芯片个数: 沟道类型:N沟道MOS管、低压MOS管 …