从VC++6.0不足看VisualC++2010新特性
说起VC,有人想到维生素C(维C),有人想到风险投资(venture capital), 程序员们尤其是做底层开发的程序员或老程序员们第一感觉肯定会想到Visual C++6.0。为什么是6.0而不是其它的版本?这里的原因就不用我再多讲了,因为太经典了!这个经典已经有了10年的光荣历史,微软的Visual Studio系列也已经发展到了Visual Studio 2010。漫长的辉煌中Visual C++6.0也暴露出了一些问题,在这篇文章中我们将从Visual C++6.0的问题和Visual C++2010的新特性两个方面向大家介绍,也可以说是Visual C++2010 PK Visual C++6.0。
VC++ 6.0的问题
VC++ 6.0是Visual Studio6.0中的一种重要编程语言,也是中国C++开发人员使用最多的开发工具之一。 Visual C++是构建Windows平台下应用程序功能最强大而又最复杂的工具,是目前世界上使用最多的开发工具之一,应用极度广泛,从桌面应用程序到服务器程序,从系统软件到应用软件,图形图像,语音技术,设备驱动,网络安全,加密解密等等几乎无处不在。主流的3 种操作系统Windows,Linux,Unix内核都是用C语言和汇编语言写的,而上层的高级特性都是用C++编写。
直到今天,Visual C++6.0仍然占据着C++开发工具的绝对优势的地位。自从微软从2000年开始推行.NET战略以来,其核心的编程语言是C#,从那个时候,C++的支持力度就开始不断的下滑,虽然Visual C++也有几次更新,但都不是很令人满意,更灵人焦虑的是,有些开发者开始怀疑Visual C++的前途。尽管Visual C++的一些快捷开发被其他开发语言所取代,由于C++可以与操作系统的天生的暧昧关系,能够与C语言无缝结合,所以Visual C++不可能被淘汰,尤其是对于底层开发。尽管Visual C++ 6.0很强大,是编程语言里一再受宠的幸运儿。但是Visual C++6.0已经成了昨日黄花,尤其让所有Visual C++6.0开发人员郁闷的是Visual C++6.0开发的界面还停留在早期的水平上,界面粗糙,操作复杂,比起现在华丽而又夺人眼目的界面设计,更是逊色不少。而且Visual C++6.0也不完全符合C++标准。
正是由于VisualC++6.0的界面设计还停留在Windows 98时期的水平,操作复杂,再加上它不是完全符合C++标准,在代码和BUG跟踪调试上异常复杂,这也提高了踏入VC++开发的门榄。但是随着Visual C++2010的推出,全面支持最新的C++标准、改善了IDE的效率,并且引入了很多新的特性,这些功能的增强,大大提高程序员们的开发效率,带来更高的代码生产力与开发的便捷。
Visual C++2010 新特性
Visual C++2010为所有的VC++开发人员做了贴心而又周全的考虑,下面我们从可视化设计、人性化使用、安全可靠、支持C++新标准和部署简洁等方面介绍Visual C++2010的新特性。详情请见:http://msdn.microsoft.com/zh-cn/library/dd831853.aspx
1. Ribbion界面设计可视化
在Visual C++6.0开发里面,界面简单丑陋是其中一个不爽的地方。尽管在Visual C++ 2008里面对Ribbion功能有所改善,但是仍不能进行可视化设计,Visual C++ 2010新增了Windows7的风格,同时最大的革新就是实现了可视化设计,很容易设计出漂亮的程序界面。下面我们体验一下Visual C++ 2010界面可视化设计的特性。具体操作步骤如下:
Ø 打开Microsoft Visual Studio 2010,点击“文件->新建->项目”,打开“新建项目”窗体
Ø 在“新建项目”窗体中,选择“Visual C++”节点中的“CLR”,然后在“模板”窗格中选择“Windows 窗体应用程序”。名称输入“WinFormDemo”。
Ø 随即打开Windows 窗体设计器,出现Form1 窗体
Ø 设置窗体属性,Text为WinFormDemo;添加一个Label,一个Button,一个DateTimePicker,具体如下:
控件类型 |
控件名称 |
Text属性 |
Label |
labMessage |
请选择日期 |
Button |
dtpSelected |
|
DateTimePicker |
btnExit |
退出 |
Ø 选中dtpSelected,为其添加ValueChanged事件,输入如下代码
Ø 双击btnExit,输入如下代码:
Ø 按“F5”运行
2. 更加人性化设计
Visual C++ 2010也对于开发人员做了很多人性化设计,以前的Visual C++版本,经常出现假死,例如头文件编辑,改变项目设置,配置项目的物理分布,新增控件等等,微软都做了很多调整。同时有了改进的错误智能感知支持,会在错误下方显示红色的波浪线,同时还提供了错误列表窗口,在窗口中双击列表中具体的项,自动定位到错误的位置,远远胜过了以前使用的Visual Assist。
在包含头文件时,也增加了自动完成和过滤功能。键入 #include时,集成开发环境将自动创建一个包含有效的头文件的下拉列表供您选择。如果你继续输入一个文件名,集成开发环境将自动根据您的输入加以过滤。在任何时候,你都可以根据这个列表来选择你想要包含的文件。因此,这一功能可以让程序员快速地包含那些尚不确切知道文件名的文件。
3. 重新启动管理器增强了稳健性和可靠性
Visual C++ 2010新增了重新启动管理器。重新启动管理器是Visual Studio for Windows Vista 的一项新增功能,增加了在应用程序意外关闭或重新启动的情况下对应用程序的支持。重新启动管理器的行为与应用程序的类型有关,如果是文档编辑器之类的应用程序,重新启动管理使应用程序器能够自动保存已经打开的文档的状态和内容,在程序异常的时候,能够保存运行时的数据,自动恢复到未发生异常时的情况,从而提高了程序的稳健性与可靠性。如果应用程序不是文档编辑器,则重新启动管理器将重新启动应用程序,但默认情况下无法保存应用程序的状态。
重新启动后,根据不同的应用程序,有任务对话框、Windows消息框等消息提示框,供用户选择是否还原到自动保存前的状态,如果用户选择不还原,重新启动管理器将丢弃临时保存的文件
向现有应用程序中添加对重新启动管理器支持的具体步骤是:
Ø 在 Visual Studio 中打开一个现有WinFormDemo应用程序。
Ø 打开主应用程序的源文件。默认情况下,此文件是与应用程序同名的 .cpp文件。例如,WinFormDemo的主应用程序源文件是WinFormDemo.cpp。
Ø 查找主应用程序的构造函数。例如,如果项目为MyProject,则构造函数为
#div_code img{border:0px;}
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->CWinFormDemoApp::CWinFormDemoApp()
Ø 将以下代码行添加到构造函数。
Ø 确保应用程序的 [InitInstance] 方法调用其父级InitInstance方法:
CWinApp::InitInstance或CWinAppEx::InitInstance。InitInstance方法负责检查m_dwRestartManagerSupportFlags参数。
Ø 编译并运行应用程序
4. 完全支持C++0x新标准
Visual Studio 2010开始对C++新标准C++0x全面支持,不会再像Visual C++ 6.0一样,对C++标准支持不佳。引进了很多C++新特性,这些新特性带来C++性能与效率更大的提升。并且在项目升级上做了很大改进,以前Visual Studio2008, Visual Studio 2005升级VC6.0的时候,经常遇到C++语言新特性标准兼容性问题,Visual Studio 2010将兼容VC6.0,乃至Visual Studio2008,2005,2003开发的程序,进行代码转换与项目升级的时候自动更改编译器设置C++语言兼容,用以前的开发工具开发的程序在Visual Studio 2010都将不会再出现兼容性问题与故障。那些已经存在的非托管应用程序,通过一定的处理也同样能够具有Windows7所带来的特性。所有的老项目都能用Visual Studio 2010进行兼容性升级。
5. 更容易发布、部署
Visual Studio 2010改变了依赖于VisualC++库的应用程序的发布方式。依赖于Visual C++库的应用程序不再需要Fusion (WinSxS) Manifest,这意味着当我们将应用程序部署到一个本地文件夹时,将不再需要众多的小Manifest。另外,Visual C++ 2010也同样支持之前的各种部署机制,这些过去常用的方法在System32目录下安装Visual C++库。总之,Visual C++程序的发布与部署将更加简单。
首先,生成前面项目的Release文件,具体方法是选中解决方案,修改配置管理器中的配置为“Release”,然后“生成解决方案”即可。
然后,在前面创建的解决方案中,添加“安装和部署”项目
Ø 选择“文件->新建->项目”,打开“新建项目”窗体
Ø 选择“安装和部署->VisualStudio Installer->安装项目”,点击“确定”
Ø 选中“Setup1”,点击右键,选择“添加->项目输出”
Ø 在“添加项目输出组”中选择“主输出”,配置选择“ReleaseWin32”,如下图
Ø 点击“重新生成”,即可产生下列文件,将 Setup1.msi 和 setup.exe 复制到第二台计算机上,按照安装向导提示的步骤完成安装。
如果将应用程序部署到应用程序本地文件夹,只需生成Release文件,然后复制WinFormDemo和C 运行库(CRT) 库文件、mfc100u.dll 和msvcr100.dll 复制到WinFormDemo项目的Release 文件夹中就可以了。
VC6.0与VS2010区别
l 区别1:字符串的表达
voidCMy123Dlg::OnBnClickedButton1()
{
// MessageBox("你好");//以前VC6.0写法,现在用不了.老版本用的多字节字符集
// MessageBox(L"你好");//L是 unicode字符集,可移植性不好
// MessageBox(_T("你好"));//这3种方法一样
// MessageBox(TEXT("你好"));
// MessageBox(_TEXT("你好"));
}
在VS2010中用哪个比较好?_T(),至于说明介绍之类的资料,在网上有很多,所以没有复制过来
l 区别2:网络编程的移植性:
区别还是有一丁点.就是字符上面.只要用_T(x)即可首先不得不说明:现在相当大的程序,都是使用多字节,并不是一步就能改成兼容的Unicode库.在代码中是要花费大量精力去修改,本来一个小小的程序,说不定修改就占了一半的时间与精力.(会修改还好,不会修改,那真的是...)举一个函数strcpy_s,在2者版本中兼容性就有问题.具体在MSDN中查询strcpy_s
所以,以后的程序中以大众为版本,使用多字节版--------->以后不做提示.默认为多字节版,另外写的程序默认为静态链接库(考虑到程序移植问题)
l 区别3:在类视图中,VS2010删除一个函数不是右键-->删除就能删除的,而是在类向导中--->删除
l 区别6:同一条语句.在VS2010编译器中,C++不允许默认int类型存在.而在VC++6.0就可以存在.语句如下:
ShutDownProc(BYTE* DATE);//函数声明
CMyDlg::PutFileProc(BYTE *DATE)//函数使用
{
SetDlgItemText(IDC_WORK_START,(char*)DATE);
}
区别将持续更新中,敬请期待~~ ,另外,我们最常用文件头 iostream.h在 vc2010里面用不了2010只支持iostream + uisng namespace std
如何从VC++6.0向VS2010过渡
l 1)你的工程不是vc6.0的工程,如果要移植到vs2008/vs2010,直接用vs2008/vs2010用打开工程中.vcproj文件。如果遇到警告,或编译错误需要自行调试。
l 2)vc6.0中.dsw-->工作空间(类似vs2008/vs2010的解决方案),.dsp-->工程文件;
vs2008/vs2010中-->.sln工作空间, .vcproj-->工程文件;
小结
经典也有过去时,在本文中我们对VC++6.0不足做了阐述,同时对Visual C++ 2010的一些新特性做了介绍,并将这二者做了比较,不难看出,微软花大精力推出的Visual C++ 2010,在操作使用、安全方面等,更多的考虑了使用者的习惯,在类库(MFC)和向导工程上都做了重要更新,更大程度上提高了开发人员的效率,我们还等什么呢,拥抱Visual C++ 2010,完美编码吧