Visual C++.net与Visual C++6.0使用之差别
2002年2月13日,微软公司发布了具有历史意义的Microsoft Visual Studio.net,这给全世界的软件开发人员打了一针强心剂,一个历史上最为强大的开发工具诞生了!但是人们在高兴的同时,也产生了一些小麻烦,因为微软新的产品与以前的版本在使用上有所不同,有些地方甚至还有很大的差异,我也是一个使用微软开发工具的软件开发人员,下面就我个人的体验来为大家解一些疑排一些惑,有些还不够全面。
我以Microsoft Visual C++.net为例,来说一说我发现的与Microsoft Visual C++6.0的不同之处。
下面给你一个Microsoft Visual C++.net的工作空间(workspace)的总体印象,见下图(这也是我最喜欢的自定义形式,我用的是Windows2000Server+Microsoft
Visual Studio.net Enterprise Archtect Edition)
明显可以看出与6.0的不同之处,从第一感受来说是更漂亮了,我相信大多数人都会同意我的看法的,对吧^_^….
但我们要看到实质的变化,就要对比一下这两个版本。我们以一个SDI应用程序Test为例,来看一看他们的区别,好吧正式开始!
(1) 首先看看目录文件架构的不同:(vc.net的默认安装目录为:…\ Microsoft Visual Studio .NET;而vc6.0默认安装目录为:…\Microsoft Visual Studio)
vc.net目录下的文件目录数比vc6.0的要多出一些,但主要的目录也大体上相同。只是原来的common变为了common7,vc98变为了vc7;我们主要看一下
vc7和vc98下的文件有什么不同;vc.net的前几个文件目录(包括:bin,include,lib,crt,atlmfc)与vc6.0基本相同,不同的是vc.net将atl和mfc合并为一个目录atlmfc,原来的mfc源代码可以在atlmfc\src\mfc中找到。
而vc7中的其他新增的文件目录则估计是微软细分功能的产物。我们暂不去考虑。
(2)配置应用程序使用环境:由于vs.net集成了vc++,vb,vc#等多种开发工具而且提供了多种配置方案,对于vc开发人员,推荐使用“vc++开发人员”配置。
(3)MFC应用程序向导差异:当分别在vc.net 和vc6.0用MFC应用程序向导创建新工程Test时,你就会发现MFC应用程序向导在两个版本中稍有不同。首先在
向导的样式上,vc.net使用的是嵌入浏览器模式而vc6.0使用的是对话框模式,而且vc.net在应用程序类型选项中提供了“多顶级文档”的方案和更加明显的
“用户界面功能”选项。
(4) 应用程序向导产生的各种文件的差异:下面列出两个版本中的功能对应的文件
vc.net
vc6.0
xx.sln(visual studio solution )
xx.dsw(developer studio workspace)
xx.vcpj(visual studio project)
xx.dsp(developer studio project)
其他文件基本相同,但vc.net中已经不存在xx.clw(class wizard)文件了,但多了一个xx.aps文件和一个xx.manifest文件(在res文件夹中)。
(5)stdafx.h文件的不同:在vc.net生成的文件中stdafx.h文件变化最大,众所周知stdafx.h以及stdafx.cpp是为了产生预编译块xx.pch,下面是Test项目中stdafx.h文件的源代码:
// stdafx.h : 标准系统包含文件的包含文件,
// 或是经常使用但不常更改的
// 项目特定的包含文件
#pragma once
#ifndef VC_EXTRALEAN
#define VC_EXTRALEAN // 从 Windows 标头中排除不常使用的资料
#endif
// 如果您必须使用下列所指定的平台之前的平台,则修改下面的定义。
// 有关不同平台的相应值的最新信息,请参考 MSDN。
#ifndef WINVER // 允许使用 Windows 95 和 Windows NT 4 或更高版本的特定功能。
#define WINVER 0x0400 //为 Windows98 和 Windows 2000 及更新版本改变为适当的值。
#endif
#ifndef _WIN32_WINNT // 允许使用 Windows NT 4 或更高版本的特定功能。
#define _WIN32_WINNT 0x0400 //为 Windows98 和 Windows 2000 及更新版本改变为适当的值。
#endif
#ifndef _WIN32_WINDOWS // 允许使用 Windows 98 或更高版本的特定功能。
#define _WIN32_WINDOWS 0x0410 //为 Windows Me 及更新版本改变为适当的值。
#endif
#ifndef _WIN32_IE // 允许使用 IE 4.0 或更高版本的特定功能。
#define _WIN32_IE 0x0400 //为 IE 5.0 及更新版本改变为适当的值。
#endif
#define _ATL_CSTRING_EXPLICIT_CONSTRUCTORS // 某些 CString 构造函数将是显式的
// 关闭 MFC 对某些常见但经常被安全忽略的警告消息的隐藏
#define _AFX_ALL_WARNINGS
#include <afxwin.h> // MFC 核心和标准组件
#include <afxext.h> // MFC 扩展
#include <afxole.h> // MFC OLE 类
#include <afxodlgs.h> // MFC OLE 对话框类
#include <afxdisp.h> // MFC 自动化类
#include <afxdtctl.h> // Internet Explorer 4 公共控件的 MFC 支持
#ifndef _AFX_NO_AFXCMN_SUPPORT
#include <afxcmn.h> // Windows 公共控件的 MFC 支持
#endif // _AFX_NO_AFXCMN_SUPPORT
#include <afxrich.h> // MFC Rich Edit 类
更不同的是vc.net每个头文件中的类似如下的东东:
#if !defined(AFX_STDAFX_H__69597228_DA85_4F3B_81F6_E4E0A168D780__INCLUDED_)
#define AFX_STDAFX_H__69597228_DA85_4F3B_81F6_E4E0A168D780__INCLUDED_
不见了,真想不懂微软为什么不用file guarder,那它是如何防止同一个头文件被重复包含的,嗨?
(5)classwizard的有无:当你第一次使用vc.net时,你会惊讶的发现classwizard不见了,你会大喊“微软你太过分了。”但是如果你继续发掘的话你会发现其实
classwizard不见了又如何,微软提供的替代它的功能甚至超过了它,这些功能很分散,这里不便详述,还是你自己去发掘吧!
(6)项目方案配置. 项目工程的配置和项目目录设置:
vc.net中的项目方案配置和项目工程的配置都可以在“解决方案资源管理器”(solution explorer)中完成:(以Test为例)
项目方案配置方法:单击“解决方案资源管理器”中的“解决方案Test”,然后
在右键菜单中选择“属性”即可配置。
项目工程的配置方法:单击“解决方案资源管理器”中的“Test”,然后
在右键菜单中选择“属性”即可配置。
项目目录设置方法:选择 “工具”菜单------“选项”,弹出“选项”对话框
在“项目”中即可配置。