VS2010与VC++6.0的各种区别和移植代码问题总结

合集下载

(数据结构课件)VS2010开发环境

(数据结构课件)VS2010开发环境
VC6默认的是ASCII码,而vs2010默认是用 Unicode。
在字符串前加上_T(),编译器将会把字符串以 Unicode方式保存
例如:MessageBox(_T("您确定要进行加法计算吗? "), _T("加法计算器"), MB_OKCANCEL);
VS2010与VC6区别:
_T实际上是一个宏,工程的字符集选择为Unicode 时字符串就转为Unicode字符串,选择为MultiByte时就转为ASCII字符串。我们可以在Solution Explorer的Addition根节点上点右键,在右键菜单 上选择“Properties”,弹出工程的属性对话框, Configuration Properties->General右侧列表中的 Character Set就显示选择“生成”工具栏类似于VC6的Build MiniBar
点“生成”工具栏右边的小三角可以添 加一些自己常用的按钮。
选“自定义”-》“添加命令”,左侧 的列表中选“调试”,右侧显示相应按 钮,如“按行调试”、“断点”、“开 始/继续”、“开始执行(不调试)”等。
VS2010与VC6区别:
VS2010中引用系统头文件都不加.h 例如VC6中的#include <iostream.h> 改为 #include <iostream>
VS2010中要引用标准库,所以在程序开头应添 加一句:using namespace std; cin、cout、endl等都是std空间中。
VS2010与VC6区别:

VS2010引用VC6.0

VS2010引用VC6.0

对了,VC6的工程,转换为VS2010或VS2013工程之后,需要进行一些设置:
1、工程属性 -》C/C++ -》语言-》将wchar_t视为内置类型:设置为否
2、工程属性 -》链接器 -》高级-》映像具有安全异常处理程序:设置为否 (/SAFESEH:NO)
3、如果需要在C++异常里面,即try...catch...里面,捕获SEH异常(如非法地址访问、除零等),则需要在
工程属性 -》C/C++ -》代码生成-》启用C++异常:设置为“是,但有 SEH 异常(/EHa)”
4、添加对库文件crtnew.lib的引用
最后,如果在构建Release模式的程序的时候,出现了_CrtDbgReport相关的链接错误,则在你的代码中的任意地方,调用一次声明在crtnew.h中的CRTNEW_RESOLVE_CRTDBGREPORT_LINK_ERROR() 宏,即可解决此链接错误。

vc6.0迁移到vs2010中的问题的解决方法

vc6.0迁移到vs2010中的问题的解决方法

1.编译错误C20651>c:¥documents and settings¥administrator¥桌面¥host_sp3¥selectdialog.cpp(62): errorC2065: “i”: 未声明的标识符解决办法,将for (int i = 0; i < m_deviceList.size(); i++){m_ctlDevicelist.AddString(m_deviceList[i]);}中变量i的定义放到函数体开头int i;for (i = 0; i < m_deviceList.size(); i++){m_ctlDevicelist.AddString(m_deviceList[i]);}2.链接错误LNK2019odbccp32.lib(dllload.obj) : error LNK2019: 无法解析的外部符号__imp___vsnprintf,该符号在函数_StringVPrintfWorkerA@20 中被引用odbccp32.lib是在程序中对数据库操作时用到的,这个链接问题在使用静态DLL方式时才会遇到,如果使用共享DLL方式时不会出现,但是因为本程序需要使用静态DLL方式,所以继续尝试其他的解决方法。

尝试在程序属性的连接器输入选项中添加附加依赖项odbccp32.lib,依然报错。

于是在系统中搜索这个lib文件,最终找到了两种不同版本的odbccp32.lib。

VC6.0中文件信息:C:¥Program Files¥Microsoft Visual Studio¥VC98¥Lib¥ODBCCP32.LIBVS2010中文件信息:C:¥Program Files¥Microsoft SDKs¥Windows¥v7.0A¥Lib¥odbccp32.lib从文件信息中可以看出两个文件的版本大小都不同。

VC6.0常见错误信息分析

VC6.0常见错误信息分析

1.程序开发过程中出现的错误类型我们在进行程序设计时,不可避免地会犯错误。

程序中的错误可以分为三类:编译错误、运行时错误和逻辑错误。

1.1编译错误编译错误(Compile errors)又称为编译时错误(Compiling-time errors): 是由于错误的编码产生的。

例如关键字拼写错误、将中文标点符号当成英文符号使用、遗漏了某些必要的标点符号或者使用了一个没有定义的标识符。

编译错误一般都是语法错误,当编译器对程序进行语法检查时,都能发现这些错误,并能够指出产生错误的位置(标出行号)。

我们可以根据编译出错信息指出的行号找到对应的源代码行改正错误,重新编译源程序。

只有当所有的编译错误被改正后,才能通过编译检查,产生目标代码文件。

改正编译错误的关键是要能正确理解编译器给出的编译错误信息。

VC++环境中的编译、链接错误信息是用英文表示的。

对于英文基础薄弱的读者,可以参考本实验指导书后面的“VC++编译、链接常见错误和警告信息中英文对照”。

通常情况下,一个语法错误可能产生多条编译错误信息,这是由于株连错误造成的,建议读者在处理编译错误时,找到第一个出现错误的位置改正后重新编译。

这样能够避免被株连错误迷惑。

值得指出的是,现在大部分编译器对错误的定位不精确,如果在编译器指出的行没有发现错误,应该向前查找错误。

例如,当提示第10行发生错误时,如果在第10行没有发现错误,请从第10行开始往前查找错误并修改之。

1.2运行时错误运行时错误(Run-time errors)是在程序的运行阶段出现的,当运行环境检测到程序的某些操作无法执行,例如除数为零时,就会出现运行时错误。

当运行环境检测到程序的某些操作是被禁止的,也会产生运行时错误。

例如,访问数组时超越数组的边界,空指针引用(NULL pointer assignment,空指针赋值,即有指针未赋具体地址就使用了)等等。

1.3逻辑错误逻辑错误(Logic errors):当程序没有按照程序员的意图执行时,就表明程序中存在逻辑错误。

VC++6.0与VS2008的区别

VC++6.0与VS2008的区别

1.MessageBox()VC++6.0:MessageBox("Hello,World!");VS2008:MessageB ox(L"Hello,World!"); 或MessageBox(TEXT("Hello,World!"));bo box内容添加方法VC++6.0:Drop-Down List B ox Control 的Properties 中的Data 用Ctrl-Enter 输入VS2008:更名为Combo-Box Control ,并在右侧Data 区域用semicolons(即';')分隔输入3.从.net开始就没有classwizard了,全部在属性窗口里了属性窗口中有,闪电图标及右边的都是,包括事件,消息,虚函数重载,加入变量则是在类标上右击->添加变量……4.消息映射VS2005对消息的检查更为严格,以前在VC6下完全正常运行的消息映射在VS2005下编译不通过a,ON_MESSAGE(message,OnMyMessage);OnMyMessage返回值必须为LRESULT,其形式为:afx_msg LRESULT OnMyMessage(WPAR AM, LPARAM);如果不符合,则有错误提示:error C2440: “static_cast”: 无法从“void (__thiscall CPppView::* )(WPARAM,LPARAM)”转换为“LRESULT (__thiscall CWnd::* )(WPARAM,LPARAM)”error C2440: “static_cast”: 无法从“void (__thiscall CPppView::* )(void)”转换为“LRESULT (__t hiscall CWnd::* )(WPARAM,LPARAM)”b,在VS2005中,OnMyMessage返回值必须为BOOL,且含有一个UINT 参数指出了命令ID,其形式为:afx_msg BOOL OnMyMessage(UINT);如果不符合,则有错误提示.如在VS6中,OnMyMessage2的定义为afx_msg BOOL OnViewZoomBar()时亦可正常编译通过,但在VS2005下,有错误提示:error C2440: “static_cast”: 无法从“BOOL (__thiscall CMainFrame::* )(void)”转换为“BOOL (__thiscall CCmdTarget::* )(UINT)”error C2440: “static_cast”: 无法从“BOOL (__thiscall CMainFrame::* )(void)”转换为“BOOL (__thiscall CCmdTarget::* )(UINT)”5.字符处理在c中广泛使用的strcpy,strcat,strstr等等推荐使用更为安全strcpy_s,strcat_s,strstr_s等来代替.6.数学函数检查VS2005中,数学函数的参数检查更为严格,如pow(2, 45)会引起一个错误提示如下:error C2668: “pow”: 对重载函数的调用不明确d:\program files\microsoft vi sual studio 8\vc\include\math.h(575): 可能是“long double pow(long double,int)”d:\program files\microsoft vi sual studio 8\vc\include\math.h(527): 或“float pow(float,int)”d:\program files\microsoft vi sual studio 8\vc\include\math.h(489): 或“double pow(double,int)”试图匹配参数列表“(int, int)”时正确的使用为pow(2.0, 45)7.更加符合C++标准如在VS6中,在FOR循环中的循环变量的定义的作用域延伸到循环体外,VS2005则修正了这样的bug。

【转】VC和VS的区别

【转】VC和VS的区别

【转】VC和VS的区别
各个版本之间的对应关系
使⽤windows平台搞开发时,下载第三⽅库时经常会遇到⽂件名以VCxx版本号命令,VC版本如何转换成对应的VS的版本呢,这⾥总结⼀下vc和vs的关系。

Microsoft Visual Studio 6.0: VC6.0
Microsoft Visual Studio .NET 2002: VC7.0
Microsoft Visual Studio .NET 2003: VC7.1
Microsoft Visual Studio 2005: VC8.0
Microsoft Visual Studio 2008: VC9.0
Microsoft Visual Studio 2010: VC10.0
Microsoft Visual Studio 2012: VC11.0
Microsoft Visual Studio 2013: VC12.0
Microsoft Visual Studio 2015: VC14.0
VS与VC的区别
VS(virtual studio)是微软开发的⼀个集成⼯具,可以开发C++、C#、HTML、VB等。

VC(virtual c++)是专门开发C++的⼯具。

当你进去VS的时候,会提⽰你选择开发环境,如果你选择C++,选择的就是VC编程平台。

VS选择C++的开发环境
【⼯具】->【导⼊导出设置】->【重置所有设置】->【不保存/保存当前设置】->【C++】->【完成】。

VC++以及VS个版本比较 及 C++编译器比较

VC++以及VS个版本比较 及 C++编译器比较

VC++以及VS个版本比较及C++编译器比较VC6.0一般是用c++语言的MFC,是Visual Studio6一部分。

(是VC2003,VC2005,VC2008,VC2010通称,就可可以用c++语言的.net),是Visual 2003一部分。

vs包含了vc.vb,vj,vc#,是一个大集成的开发平台。

VC++是Visual C++的简称,是Visual Studio编程套件的一个部分,支持语言C/C++的编译。

vc和vs对应版本关系:vc6.0----------visual studio6.0vc7.0----------visual studio2002vc7.1----------visual studio2003vc8.0----------visual studio2005vc9.0----------visual studio2008C++编译器:Visual C++:Windows平台上最流行的编译器,和VS集成的很好,编译效率和编译后的代码效率都不错GCC/G++:开源的,Linux/Unix平台上的首选,而且支持N中硬件平台,如果想进行跨平台编译的话,这是一个不错的选择。

编译效率和编译后的代码效率都不错。

据说Linux内核的开发者都用2.95版的,这个版本编译出来的C代码应该是效率最好的。

GCC(GNU Compiler Collection,GNU编译器套装),是一套由GNU 开发的编程语言编译器。

它是一套以GPL及LGPL许可证所发行的自由软件,也是GNU计划的关键部分,亦是自由的类Unix及苹果计算机Mac OS X操作系统的标准编译器。

GCC(特别是其中的C语言编译器)也常被认为是跨平台编译器的事实标准。

GCC原名为GNU C语言编译器(GNU C Compiler),因为它原本只能处理C语言。

GCC很快地扩展,变得可处理C++。

之后也变得可处理Fortran、Pascal、Objective-C、Java,以及Ada与其他语言。

VC++6.0和VC++2010的区别

VC++6.0和VC++2010的区别

VC++6.0和VC++2010的区别VC++6.0和VC++2010有什么具体的区别呢?只要看看将6.0的程序升级运行在2010上所需要注意的“三大注意八大纪律”后,你将会一清二楚。

面对一个新的开发平台,面对一些新的开发技术,在程序员中,往往有两种截然不同的态度:保守的程序员认为:我还是保险一点比较好,让别人先升级,先试验,等到别人成功升级或者新技术应用成熟之后,我再跟着升级也不迟。

虽然说长江后浪推前浪,但是前浪都是死在沙滩上啊。

激进的程序员则认为:又有新技术出来了?太好了。

新的开发技术可以给应用程序带来这么多新的功能特性,那我赶快应用到我的产品中,增强产品的功能特性啊。

还等什么,立刻,马上进行升级应用新技术。

作为一个成熟的程序员,这两种态度都应该是我们所反对的。

面对业界不断推出的新技术新平台,我们不应该像保守的程序员那样,对新的技术发展趋势视而不见,等着别人应用成熟了再去应用,那样也许机会就白白错过了。

到时候眼巴巴看着别人吃肉自己却只有喝汤的份了。

同样的,我们也不应该像激进的程序员那样,还没有弄明白新技术到底是什么东西,新技术可以给我们带来什么价值,一听说是新技术就盲目应用到自己的产品上,而不管这些新技术是否适合自己的产品,这样的盲目应用新技术,真的只会让自己“前浪死在沙滩上”,成为盲目应用新技术的反面教材。

所以,在面对已经在业界炒得沸沸扬扬的Visual C++ 2010这个新的开发平台的时候,我们不能保守,丝毫不理会Visual C++ 2010的巨大功能改进所可能带来优势;我们也不能激进,不管三七二十一地将我们应用成熟的Visual C++ 6.0 一股脑地升级到Visual C++ 2010。

面对这个升级问题,我们应当遵守三大纪律:•先副业后主业如果我们的公司有多个产品线,那么你的升级过程应该是从你的副业开始,等副业成功升级,积累经验后,再扩展到主业。

这样不仅可以保证你的主业不受影响,降低了升级的风险。

还在使用vc6.0吗??vs2010吧

还在使用vc6.0吗??vs2010吧

还在使⽤vc6.0吗??vs2010吧每个⼈在⾯对新的事物的时候,总是充满了排斥感,当vista和win7来临的时候,我们还在留恋xp,说xp是如何的好,win7是如何的不给⼒,当然,我们必须承认,xp是⼀款优秀的操作系统,这个我们⽆法否认,也不能否认,但是它毕竟是01年的产品,就像⼆战的“零式”飞机⼀样,它很优秀,曾经叱咤太平洋,但是它可以和现在的f22猛禽,t50,f35闪电,歼20⽐较吗,为什么呢,因为不是同⼀个时代的东西了,现在的航电系统,发动机技术,电传技术等等,决定了零式飞机成为历史。

那么下⾯,我们就看看vc6.0如何成为了历史了,鄙⼈建议使⽤vs2010.1⼤家都知道,xp很快就要退出历史舞台了,那么我们开发的程序就更多的是针对vista和win7,或是win8,但是呢,在vc6.0上,很多技术已经过时,在新的操作系统上⾯已经使⽤了新的实现技术,⽽且更加强⼤⽅便,这⾥我要说的就是以前很多的⽅法都是基于API函数,通过参数或是⼀个结构体定义属性,然后调⽤⼀个函数达到设想的效果,例如,打开另存为对话框就是⼀个例⼦,现在使⽤的是基于COM的IFileDialog接⼝来实现这个⽅法,那么这个⽅法⽐以前的⽅法使⽤起来更加⽅便,不管是在属性的定义上,还是获取的结果上,都更加优秀,IFileDialog直接获得就是IShellItem接⼝,在以前,如果我们要获得这个接⼝,是通过将全路径传到⼀个函数中,来获得这个接⼝,⽽现在我们直接就可以⽤了。

2上⾯我们说到了com(component object model ),也就是组件对象模型,这个模型将⽅法的声明使⽤和实际执⾏分开,⽽且与语⾔⽆关,可以在别的语⾔开发平台上也可以使⽤,所以,可以做到⼀次开发,多重使⽤,对于对象的⽣命周期的管理更加科学,⽽且使⽤起来极为⽅便,我想这也是为什么现在很多的功能不再使⽤API来实现,⽽是使⽤COM来实现,如DDE(动态数据交换),现在已经被DDEML代替,剪切板也不再使⽤共享内存来实现进程之间数据的传输,⽽是使⽤的基于com的数据对象实现,⽽这⼀切对系统是有要求的,那就⾄少vista以后的系统,所以应该是vs2010,或是vs2008.微软每出⼀代系统,对应就有了相应的编译器更新,如果你明⽩代码到exe的过程,那么你就明⽩了。

从VC++6.0不足看Visual C++2010新特性

从VC++6.0不足看Visual C++2010新特性

从VC++6.0不足看Visual C++2010新特性说起VC,有人想到维生素C(维C),有人想到风险投资(venture capital),程序员们尤其是做底层开发的程序员或老程序员们第一感觉肯定会想到VisualC++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 Studio 6.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++不可能被淘汰,尤其是对于底层开发。

VC++6.0版本程序转成VS2010版

VC++6.0版本程序转成VS2010版

VC++6.0版本程序转成VS2010版直接转换的时候遇到两个问题:1、预编译头文件*.PCH找不到2、static_cast”: 无法从“void (__thiscall CView2::* )(void)”转换为“LRESULT (__thiscallCWnd::* 1、来源:/archives/2231错误:fatal error C1083: 无法打开预编译头文件:“Debug\xxx.pch”: No such file or directory“Rebuild All”没有解决,然后把“C/C++”属性中的“预编译头”由“使用(/Yu)”改为“创建(/Yc)”,问题解决了。

看来还是预编译头文件xxx.pch创建的有问题,仔细想一下,vc工(其实起作用的是stdafx.h,但头文件不参加编译,程的预编译头是由stdafx.cpp编译生成的。

所以需要stdafx.cpp文件,这个文件里只有一句代码:#include “Stdafx.h”。

)综上:最妥善的解决方法就是,在工程属性中,选择“使用(/Yu)”预编译头,而单独将stdafx.cpp设置为“创建(/Yc)”预编译头。

关于“预编译头”的作用,参考如下:在很多程序中,每个源文件都存在一些相同的部分。

比如要包含相同的一些头文件,而且这些头文件可能很长,例如window.h。

如果用普通的方法编译这些源文件,对这些头文件在每个源文件中的出现都要重新编译,作了很多重复工作。

如果能将这些头文件专门进行编译,并且把结果存储起来。

然后在编译包含这些头文件的源文件时,使用上述结果替代头文件在源文件中的出现,就可以大大减少工作量。

Microsoft Visual C++提供的“预编译头文件”机制就支持这一功能。

所谓的预编译头就是把一个工程中的那一部分代码,预先编译好放在一个文件里(通常以.pch为扩展名),这个文件就称为预编译头文件。

这些预先编译好的代码可以是任何的C/C++代码——–甚至是inline的函数,但必须是稳定的,在工程开发的过程中不会被经常改变。

初学者使用VC6.0编程易错问题及解决办法

初学者使用VC6.0编程易错问题及解决办法

0 引言多年从事高职高专学生的C++面向对象程序设计语言教学工作,在教学中发现,由于高职高专学生基础较为薄弱及课程设置等相关问题,导致绝大部分学生在学习C++程序设计过程中,尤其是使用Microsoft Visual C++ 6.0进行程序设计时,容易出现一些常见易错问题。

C++程序设计一般来说均是高职学生接触的第一门面向对象程序设计语言,其面向对象的编程思想和方法有别于C语言以及学生常规性思维。

本文总结一些常见的初学者容易出现的错误类型,便于感兴趣的初学者借鉴使用,提高大家的学习兴趣和学习效率。

1 易错问题及解决方案1.1 头文件问题使用Microsoft Visual C++ 6.0进行C++语言程序设计不同于C的一大特点之一,C++程序设计一般都要求需要先使用#in-clude命令包含需要使用到的头文件,例如程序需要使用cin及cout输入输出命令,则需要首先包含iostream文件,否则就会编译不成功,会出现cin、cout未定义以及>>、<<类型错误的错误提示。

1.2 名字空间问题类似于头文件问题,进行C++程序编译时,需要将有关的名字空间包含进来。

例如在头文件问题阐述中,为了使用Microsoft Vi-sual C++ 6.0已经定义的输入输出语句cin、cout以及<<、>>,光是包含了头文件iostream是不够的,。

此时一样会出现cin、cout未定义以及>>、<<类型错误的错误提示。

还需要使用using namespace 命令将std名字空间包含进来,因为Microsoft Visual C++ 6.0对于cin、cout以及>>、<<的定义是放在std名字空间里面的。

1.3 多个main函数问题C++程序强调一个工程有且仅有一个主函数。

但是在实际学习和编程中,很多初学者往往习惯性在一个工程下新建多个.cpp文件,且每一个.cpp文件里面都有一个主函数。

VS2010运行C程序问题解决

VS2010运行C程序问题解决

VS2010运行C语言相关问题(本人测试系统WIN7旗舰版64位)问题一:相信学习C语言的同学们一直在为自己的windows7不能用vc 6.0而烦恼着。

或许有的电脑能使用上,但绝大多数是不能的,而且会出现软件不能兼容的提醒以及一些不知名问题。

其实大家都不需要再使用vc6.0了,目前vs已经升级到了2013版本。

VS2010 /VS2012 / VS2013都能够在win7(32or64)、win8中完美运行。

但在这些软件中运行C语言,可能会遇到一些问题,但他不是VC6.0那样的缺陷,只要解决了完全可以完美。

我们必须对其进行设置后才能编写语言。

一、打开VC++2010二、文件—》新建—》项目三、在左边的最近模块选着“Win32”,在右边对话框选着“Win32控制台应用程序Visual C++”,再在下面输入“名称”和“位置”,点击“确定”四、在弹出来的对话框中选着“下一步”五、注意:在“附加选项”下选着“空项目”,其他的不动,点击完成六、回到主界面后,在左边的“解决方案资源管理器”,右击“源文件”—》“添加”—》“新建项”七、注意:在中间的对话框中选着“C++文件(.cpp)”,输入文件“名称”—》“添加”(注意要把文件名改成“名称”+“.c”,不然默认的是“.cpp”,仍然编译不了)八、写入一个C语言程序,你就发现成功了菜单栏——调试——编译九、以后需要继续编程的只需要将源文件下原来的.cpp文件右健移除(注意一次只能编写一个文件,只是移除,目录下仍存在,不必担心),再按照第六步下来就行啦。

问题二新装了Vs2010后经常遇到卡死,鼠标经常动不了?有个解决办法打开vs2010菜单栏中--工具-选项-常规-视觉体验,这里的3项都不要勾选。

这样就解决了。

问题三在运行C语言程序时,dos窗口(显示窗口)会一闪而过看不到运行结果?这个问题有几个解决办法,看自己喜欢随便用一个1)在main()函数的末尾加一个system("pause"); 此时头文件应有(可以没有)#include<stdlib.h>注意:主函数末尾有return 0;时system("pause");加在return 0;前2)在main()函数的末尾加一个getch(); 此时头文件应有(可以没有)#include<conio.h>这个不怎么常用注意:主函数末尾有return 0;时getch();加在return 0;前3)非调试状态下运行,直接按按Ctrl+F5运行调试;如果按F5调试的话,就会出现一闪而过的情况,但该方法不适用于生成的exe文件;这个用起来比较方便4)给程序加一个任务,即定义一个内联函数inline void keep_window_open(char ch;cin>>ch;),然后在mian函数末尾加上keep_Window_open();这个方法是最有效也是最常用的,网上很多方法原理都类似于此。

VS2010与VC++6.0的各种区别和移植代码问题总结

VS2010与VC++6.0的各种区别和移植代码问题总结

VS2010与VC++6.0的各种区别和移植代码问题总结第一篇:VS2010与VC++6.0的各种区别和移植代码问题总结从VC6到VC9、VS2010移植代码问题总结当年在学校学习C编程的时候用的是TC2.0,后来学C++用TC3.0,有一天突然发现Borland C++ 3.1的IDE比较好用,于是改用BC31,然后是BC4,但是到了BC5(还有BC5.02)的时候就玩不下去了,因为我那台只有16M内存的P100实在是跑不动这个庞然大物,在OWL 和MFC之间“痛苦地”抉择了一部电影的时间后,我决定放弃添加内存的计划,改用Visual C++试试。

因为当时内存太贵了,不过电影很好看,我还记得名字是《西域雄狮》,讲的是黄飞鸿到北美开宝之林分号的故事,还收了一个洋徒。

你看这思维跳跃的,打住,说正事儿吧。

看完电影后装了一个Visual C++ 4.2,这Microsoft的东西就是争气,在我的破机器上跑得马溜的快,于是就用买内存的预算买了一本《Visual C++ 4.0从入门到精通》,那个时候的出版社就是效率低,这本书已经是所有关于VC的书中最新的了,好像还看到一本《Visual C++ 1.5-2.x 使用指南》,什么年代的事情了,还摆在书架上。

哪像现在的出版社,简直就是“与时俱进”的典范,Microsoft那边《Windows 7》刚发布了个预览版,这边《下一代xxx揭密》就已经上架了,唉,又扯远了,打住。

没多久VC5就出来了,好在这两个版本的用户界面变化不大(MFC的版本稳定在4.2),我就在《Visual C++ 4.0从入门到精通》这本书的指导下“精通”了VC5。

1998年的时候Visual C++ 6.0推出了,但是我一直坚持用VC5,1999年我毕业设计还是选择用VC5,不为别的,就是因为当时盗版的VC6都没有帮助文件,就是缺少MSDN,没有这个还怎么写代码?毕业设计完成之后我从朋友那里弄到了传说中的两张MSDN光盘,于是开始用VC6,从此以后,VC6就一直存在于所有我用过的电脑中,后来VC7(7.1),VC8出来以后,VC6的地位也一直没有动摇过,用C++开发软件我首选VC6,我还为VC6开发了一个文件标签栏插件Tabbar,可以通过标签栏在打开的代码文件之间快速切换,除此之外还具有很多其它功能,比如自动打包压缩项目代码。

visual studio 2010与visual studio6.0区别

visual studio 2010与visual studio6.0区别

visual studio2010与visual studio6.0的区别Visual Studio6.0主要包含Microsoft Visual C++6.0和Microsoft Visual Basic 6.0。

Visual Studio2010和Visual C++6.0都是编程的IDE环境,Visual Studio2010包括C++、C#、VB、J#等,就C++来讲,它相当于Visual C++10.0(其中VS2002为7.0,VS2003为7.1,VS2005为8.0,VS2008为9.0),作为C++的集成开发环境,VS2010和Visual C++6.0区别并不大,只是一些语法安全问题更加严格。

他们真正的区别在于,VS2010并不是针对C++的,C++只是它的一小部分,它更加关注.net平台程序开发(主要是C#、VB,C++/CLI(C++在.net下的语言)),而VC++6.0是专注与C++开发,或者说VC6只能开发C++程序,在VC6.0时期还没有.netvs2005比较突出的特点:灵活高效的全新IDE、云计算、并行计算、面向下一代平台:Windows7C++王者归来自从Visual Studio6以后,Visual Studio中的C++再没有多大的变化,包括之前的Visual Studio2008,都只是对C++进行一些细小的改善。

但是这次随着C++新标准C++0x的即将公布,Visual Studio2010在C++开发方面也带来了很多革命性的变化。

首先是对C++新标准C++0x的全面支持,不会再像Visual C++6一样,被人诟病为对C++标准支持不佳。

在IDE方面,微软将Visual C++的构建系统VCBuild 整合到了MSBuild中;借助后台编译,Visual C++的IntelliSense更加智能,能够处理更多的文件,更加复杂的项目。

另外在MFC方面,通过引入很多新的类,MFC开始全面支持Vista、Windows7风格的UI。

VC6到VS2010迁移所有问题的解决方法(CJ60示例)

VC6到VS2010迁移所有问题的解决方法(CJ60示例)

VS2010编译Gh0st3.6 (一)2011-06-30 16:35Vs编译Gh0st修改的工作量还是挺大的,毕竟从VC6.0移植到VS2010平台,已经是一个很大的跨越了,VS2010相对于VC6.0也改进了不止一点了。

Gh0st3.6使用了第三方界面库CJ60Lib,目前这个库只支持到VC6.0,而其后的版本已经商业化,所以使用VS2010编译Gh0st的时候,需要重新编译CJ60Lib。

VS2010的自带安装的Windows SDK已经到了7.1版,也不需要像VC6.0那样需要下载Windows SDK,并配置环境了。

VC6.0支持的最高版本的Windows SDK 是Windows 2003的,而VS2010自带的7.1版已经到了Windows Server 2008 了,其中发生的变化也是很大的。

下面具体来操作一次。

先列一下几个主要下文件路径。

用的是Gh0s3.6原版,硬盘锁代码已经注释。

E:\Programming\VS2010\Gh0st3.6E:\Programming\VS2010\Gh0st3.6\gh0st.dswE:\Programming\VS2010\Gh0st3.6\gh0st\CJ60LibE:\Programming\VS2010\Gh0st3.6\gh0st\CJ60Lib\CJ60Lib\CJ60Lib.dswE:\Programming\VS2010\Gh0st3.6\gh0st\CJ60Lib\Lib一.编译CJ60Lib库直接用VS2010打开CJ60Lib.dsw进行转换。

一共有7个,有4个是已经不存在的项目了,直接删掉。

在灰色的项目上点右键–Remove,或直接按Del键删除。

1.1编译CJ60StaticLib直接在CJ60StaticLib项目上点右键— Project Only —- Build Only CJ60StaticLib或者是Rebuild Only CJ60StaticLib。

VS中工程迁移至VC6.0时应该注意的若干问题

VS中工程迁移至VC6.0时应该注意的若干问题
END_MESSAGE_MAP()
VC高版本的方式:
BEGIN_MESSAGE_MAP(CImageInfoDlg, CDialog)
ON_CBN_SELCHANGE(IDC_COMBO1, &CImageInfoDlg::OnCbnSelchangeCombo1)
ON_CBN_SELCHANGE(IDC_COMBO2, &CImageInfoDlg::OnCbnSelchangeCombo2)
ON_BN_CLICKED(IDC_RADIO2, &CImageInfoDlg::OnBnClickedRadio2)
END_MESSAGE_MAP()
修改为对应版本的方式即可。
5、有关项目设置
输出路径改为Debug。VC高版本默认为$(SolutionDir)$(ConfigurationName)
以下是后来将进行到一半的VS的工程转化成VC6.0工程需要注意的一些问题。
1、转换工程文件,生产工作区文件。
首先下载projectconverter,根据说明,用命令行操作!
2、cannot open file"mfc42ud.lib"
那是由于在VS下使用MFC时候选用了UNICODE编码,而VC6.0的运行库没有此文件,所以发生错误。可以下载同名.lib文件复制到windows/system32文件夹下,或者在VC6.0的Project中设置去掉UNICODE编码模式,使用_MBCS
诸如for(int i){} i不能在循环外使用的,这都是小问题。比较麻烦的是对字符串操作。
例如VC6.0对CString变量赋值比较容易str=“Hello world!';,VS中必须为str=_T("Hello World");.

VC6.0的项目怎样移植到VS2008和VS2010问答集

VC6.0的项目怎样移植到VS2008和VS2010问答集

VC6.0的项目怎样移植到VS2008和VS2010,该如何解决VC6.0的项目怎样移植到VS2008和VS2010一个VC控件项目的目录结构是这样的:问题一:这是不是一个VC6.0的项目目录结构,怎样将其移植到“VS2008和VS2010”,使其正常运行???问题二:VC6.0的解决方案和VS2008/VS2010的解决方案有什么不同???两者可不可以相互转化???------解决方案--------------------------------------------------------你直接打开.vcproj文件不行吗?------解决方案--------------------------------------------------------翘首以待。

------解决方案--------------------------------------------------------1)你的工程不是vc6.0的工程,如果要移植到vs2008/vs2010,直接用vs2008/vs2010用打开工程中.vcproj文件。

如果遇到警告,或编译错误需要自行调试。

2)vc6.0中.dsw-->工作空间(类似vs2008/vs2010的解决方案),.dsp-->工程文件;vs2008/vs2010中-->.sln工作空间,.vcproj-->工程文件;不能相互转换,转化方向:vc6.0->vs2008->vs2010,如果编译有错,需要自己去调试。

------解决方案--------------------------------------------------------学习了------解决方案--------------------------------------------------------直接用08或10打开,有变异错误再慢慢调就行了------解决方案--------------------------------------------------------一般库还有一些函数的参数不一样,需要该的,先调试下看哪有错误,再慢慢改------解决方案--------------------------------------------------------移植过去改的东西可能会相当多,得做好这个思想准备------解决方案--------------------------------------------------------就凭那几个文件真不能判断是否为VC6的项目,不过可以在VC25008/VC2010中直接打开.vcproj文件,会自动提示并转换成相应类型的项目的。

[转载]VC++6.0与VS2010的区别

[转载]VC++6.0与VS2010的区别

[转载]VC++6.0与VS2010的区别区别1:字符串的表达void CMy123Dlg::OnBnClickedButton1(){// MessageBox("你好");//以前VC6.0写法,现在用不了.老版本用的多字节字符集// MessageBox(L"你好");//L 是 unicode字符集,可移植性不好// MessageBox(_T("你好"));//这3种方法一样// MessageBox(TEXT("你好"));// MessageBox(_TEXT("你好"));}在VS2010中用哪个比较好?_T(),至于说明介绍之类的资料,在网上有很多,所以没有复制过来区别2:网络编程的移植性:区别还是有一丁点.就是字符上面.只要用_T(x)即可首先不得不说明:现在相当大的程序,都是使用多字节,并不是一步就能改成兼容的Unicode库.在代码中是要花费大量精力去修改,本来一个小小的程序,说不定修改就占了一半的时间与精力.(会修改还好,不会修改,那真的是...)举一个函数strcpy_s,在2者版本中兼容性就有问题.具体在MSDN中查询strcpy_s所以,以后的程序中以大众为版本,使用多字节版--------->以后不做提示.默认为多字节版,另外写的程序默认为静态链接库(考虑到程序移植问题)区别3:在类视图中,VS2010删除一个函数不是右键-->删除就能删除的,而是在类向导中--->删除区别4:自定义函数格式发生了变化,如Vc6.0自定义的PostMessage就与VS2010格式不一样,VS2010采用的指针格式区别5:VS2010自带了winsock2库(第2版的库),每次都不用加Ws2_32.lib这个了(推荐加上)举例:创建win32控制台应用程序(带MFC头文件),每次就不用加区别6:同一条语句.在VS2010编译器中,C++不允许默认int类型存在.而在VC++6.0就可以存在.语句如下:ShutDownProc(BYTE* DATE);//函数声明CMyDlg::PutFileProc(BYTE *DATE)//函数使用{SetDlgItemT ext(IDC_WORK_START,(char*)DATE);}。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

从VC6到VC9、VS2010移植代码问题总结当年在学校学习C编程的时候用的是TC2.0,后来学C++用TC3.0,有一天突然发现Borland C++ 3.1的IDE比较好用,于是改用BC31,然后是BC4,但是到了BC5(还有BC5.02)的时候就玩不下去了,因为我那台只有16M内存的P100实在是跑不动这个庞然大物,在OWL和MFC之间“痛苦地”抉择了一部电影的时间后,我决定放弃添加内存的计划,改用Visual C++试试。

因为当时内存太贵了,不过电影很好看,我还记得名字是《西域雄狮》,讲的是黄飞鸿到北美开宝之林分号的故事,还收了一个洋徒。

你看这思维跳跃的,打住,说正事儿吧。

看完电影后装了一个Visual C++ 4.2,这Microsoft的东西就是争气,在我的破机器上跑得马溜的快,于是就用买内存的预算买了一本《Visual C++4.0从入门到精通》,那个时候的出版社就是效率低,这本书已经是所有关于VC的书中最新的了,好像还看到一本《Visual C++ 1.5-2.x 使用指南》,什么年代的事情了,还摆在书架上。

哪像现在的出版社,简直就是“与时俱进”的典范,Microsoft那边《Windows 7》刚发布了个预览版,这边《下一代xxx揭密》就已经上架了,唉,又扯远了,打住。

没多久VC5就出来了,好在这两个版本的用户界面变化不大(MFC的版本稳定在4.2),我就在《Visual C++ 4.0从入门到精通》这本书的指导下“精通”了VC5。

1998年的时候VisualC++ 6.0推出了,但是我一直坚持用VC5,1999年我毕业设计还是选择用VC5,不为别的,就是因为当时盗版的VC6都没有帮助文件,就是缺少MSDN,没有这个还怎么写代码?毕业设计完成之后我从朋友那里弄到了传说中的两张MSDN光盘,于是开始用VC6,从此以后,VC6就一直存在于所有我用过的电脑中,后来VC7(7.1),VC8出来以后,VC6的地位也一直没有动摇过,用C++开发软件我首选VC6,我还为VC6开发了一个文件标签栏插件Tabbar,可以通过标签栏在打开的代码文件之间快速切换,除此之外还具有很多其它功能,比如自动打包压缩项目代码。

唉,又跑题了,打住。

做人要与时俱进,这不,今年VC9也随着Visual Studio 2008发布了,再不赶上就真的老套了。

说是这么说,不过心里还是有些余悸的,2006年的时候我曾经试图将我的一个工具软件的代码升级到VC8,但是我低估了新的编译器的兼容性(当年从VC5到VC6可是没有那么多麻烦),上来就是一大堆编译错误,警告就更是牛毛,当时因为急着为工具软件开发一个新功能,没有时间解决这些问题,只好放下了,这一放就是两年。

我这个人喜欢自己做工具软件,目的是为了方便自己,以前用VC6,觉得在代码源文件之间切换很麻烦,但是WndTab太占用资源,于是就借鉴WndTab的部分代码自己做了个标签栏插件Tabbar,还把从CodeProject上看到的好的创意都添加进去,后来用Source Insight,觉得它没有文件标签栏太土,就给它做了个标签栏外挂(TabSiPlus),就这样几年下来竟然有几百兆的工具代码,这个移植的工作量可是非同小可,想着都怕怕呀!不过也没办法,这两年主要用GCC做嵌入式开发了,没有时间维护这些工具,自己在使用过程中累计下来的BUG和新需求也有一大堆,需要进行升级了,适逢这次机会将其移植到VC9到也是个不错的选择。

其实程序员自己给自己写工具很有好处,比如我喜欢边写代码边听音乐,于是我就把自己写的MP3播放器集成到VC开发环境中,这样就可以象操作VC的其它功能一样选择音乐文件,还比如。

又扯远了,回到正题,讲讲移植过程中遇到的问题。

首先可以直接用Visual Studio 2008的打开VC6的工作区文件和项目文件(dsw和dsp),并将其升级为VS2008的解决方案格式和项目格式(sln和vcproj),VC9的编译器相对于VC6有了很大的变化,一些编译参数和链接参数被废弃(比如/map:line),有一些改变了名称,还有新增的选项,不过不用担心,升级过程会自动对其进行转换,最终都会得到一个正确的解决方案和VC项目文件,这个过程不会遇到太多的麻烦,问题都出在随后的编译过程中,下面就将我在移植的过程中遇到的问题和我的解决方法总结一下,希望对还在用VC6维护代码的朋友有所帮助。

一、_WIN32_WINNT 与 _WIN32_IE 设置冲突_WIN32_WINNT 与 _WIN32_IE设置不兼容会导致如下C1189致命错误:StdAfx.cppc:/program files/microsoft sdks/windows/v6.0a/include/sdkddkver.h(217) : fatal errorC1189: #error : _WIN32_WINNT settings conflicts with _WIN32_IE settingStdAfx.cpp通常是项目中第一个编译的文件,这个错误将导致编译无法继续进行。

产生这个错误的原因是原因是_WIN32_WINNT的版本定义太老,老的VC代码对_WIN32_WINNT的典型设置是:#ifndef _WIN32_WINNT#define _WIN32_WINNT 0x0400#endif0x0400相对于VS2008所带的Plarform SDK(在文件sdkddkver.h中)中_WIN32_IE的定义来说太老了,导致不兼容,可以将其改成0x0501或更高的版本避免这个问题,如下所示:#ifndef _WIN32_WINNT#define _WIN32_WINNT 0x0501#endif也可以将这三行_WIN32_WINNT定义删除,这样就会使用Plarform SDK中的_WIN32_WINNT定义,自然就不存在不兼容问题了。

不过出于对老版本VC的兼容考虑(毕竟以后可能还要使用VC6编译代码),最好这样修改:#if _MSC_VER <= 1200 // MFC 6.0 or earlier#ifndef _WIN32_WINNT#define _WIN32_WINNT 0x0400#endif#endif二、afximpl.h文件中的语法错误MFC出现的时候STL还没有成为C++的标准,所以MFC使用一套自己的模版库,比如CArray、CList、CMap等等,这些类型声明都在afximpl.h文件中。

原来在VC6编译器适用的模版语法可能不适用VC9,特别是当以下四个环境变量设置不兼容时,就会出现这个编译错误,大致情况如下:e:/software/microsoft visual studio 9.0/vc/atlmfc/src/mfc/afximpl.h(625) : error C2059: syntax error : '<L_TYPE_raw>'e:/software/microsoft visual studio 9.0/vc/atlmfc/src/mfc/afximpl.h(625) : error C2238: unexpected token(s) preceding ';'e:/software/microsoft visual studio 9.0/vc/atlmfc/src/mfc/afximpl.h(629) : error C2059: syntax error : '<L_TYPE_raw>'e:/software/microsoft visual studio 9.0/vc/atlmfc/src/mfc/afximpl.h(629) : error C2238: unexpected token(s) preceding ';'合理调整stdafx.h中WINVER、_WIN32_WINNT、_WIN32_WINDOWS和_WIN32_IE的设置可以避免这个问题,将三个与Windows版本有关的环境变量设置为0x0501或更高版本,将IE版本的环境变量设置为0x0500以后的版本就可以解决这个问题。

当然,考虑到与旧的VC6代码兼容,可以采用上一个问题中提到的最后一个解决办法,用_MSC_VER进行隔离。

三、旧的CRT库和新的安全CRT库引起的C4996告警解决了环境变量设置不匹配导致的问题后,编译过程就真正开始了,不过首先映入眼帘的应该是成堆的C4996编译告警,对每个使用了含字符串参数的CRT库函数都会有C4996编译告警,一个典型的输出如下所示:f:/project/...../commonfunc.cpp(280) : warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use_CRT_SECURE_NO_WARNINGS. See online help for details.e:/software/microsoft visual studio 9.0/vc/include/string.h(74) : see declaration of 'strcpy'MSDN online 是这样解释的:为了显著增加CRT库的安全性,许多CRT函数都有了一个更安全的新版本,新版本和旧版本的区别就是新版本函数名多了一个_s后缀。

只要一个CRT函数有新的安全版本,编译器就会产生一个C4996告警,不过,出现这个告警的目的并不是说旧版本的CRT函数将淡出CRT库,告警出现只是为了提醒程序员这个函数有更安全的版本存在。

一种安全的或者是被鼓励的做法是用安全版本的函数替换现有的CRT 函数,不过对于一个有相当代码量的项目,替换工作量也是巨大的,这可不是用名称查找、替换就能简单解决的问题,因为许多安全版本的CRT函数参数个数也发生了变化。

也可以用预处理指令消除这个告警:#pragma warning( disable : 4996 )或者定义 _CRT_SECURE_NO_WARNINGS 压制这个告警(在stdafx.h中define或在项目属性中设置预处理符号,PreProcessor Definitions)。

除了C语言的CRT函数外,POSIX 兼容函数也存在这个告警,解决方法是用POSIX标准名称替换(比如access换成_access)或者是定义_CRT_NONSTDC_NO_WARNINGS 压制这个告警(方法同上)。

相关文档
最新文档