VC6.0工程转换到VS2010版本的常见问题
来源:互联网 发布:jdk 7u79 windows x64 编辑:程序博客网 时间:2024/05/29 15:08
由于不少程序的Demo是用VC6.0编写的,在没安装VC6.0得情况下,常常将其转化为高版本的vs工程,但转化编译后会存在各种问题,以下就是版本转换常见的问题。
1、math.h中的函数报错
如果你在vc6.0的过程中使用到math.h库函数中的pow函数、sqrt函数等,在转换后可能会出现以下错误:
error C2668: “pow”: 对重载函数的调用不明确
error C2668: “sqrt”: 对重载函数的调用不明确
出现这个问题,常常是因为使用这两个函数时,第一个参数使用的int的数据类型。
我们在VS2010中打开的math.h头文件,搜索pow函数的定义,发现根本没有第一个参数为int数据类型的重载函数。
所以我们只要对使用的参数进行强制转换即可,或者重新定义该参数的数据类型,让其匹配重载函数的一个。
2、不能实例化抽象类的错误
如果你的代码涉及到C++的异常抛出,编译转换后的代码还可能会出现以下错误:
error C2259: “CException”: 不能实例化抽象类
这是由于CException在两个版本的AFX.h中的定义是不同的。
c:\Program Files (x86)\Microsoft Visual Studio\VC98\MFC\Include\AFX.H中:
#ifdef _AFXDLLclass CException : public CObject#elseclass AFX_NOVTABLE CException : public CObject#endifd:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\atlmfc\include\afx.h中:
class AFX_NOVTABLE CException : public CObject{ //................}对比代码可发现VC6.0中的CException类宏定义默认为_AFXDLL,所以采用的是class CException:public CObject的派生方式。
VS2010中的CException类宏定义只有AFX_NOVTABLE,查看AFX_NOVTABLE定义:
#define AFX_NOVTABLE __declspec(novtable)__declspec(novtable) 在C++中接口中广泛应用, __declspec(novtable) 就是让不允许类有虚函数表以及对虚函数表的初始化代码, 这样可以节省运行时间和空间. 但是这个类一定不允许生成实例, 因为没有虚函数表, 就无法对虚函数进行调用.。所以在VS2010中下述代码会出错:
throw new CException;解决办法一:如果不需对各种异常进行处理处理,只需要报错的情况下,可将代码改为:
throw L"Error!"解决办法二:将其替换成CException的派生类,CMemoryException、CFileException等,视情况而定。
3、VC6.0向导生成对3D效果控件的支持产生的警告
warning C4996: 'CWinApp::Enable3dControls': CWinApp::Enable3dControls is no longer needed. You should remove this call
报警告的代码如下:
#ifdef _AFXDLLEnable3dControls();// Call this when using MFC in a shared DLL#elseEnable3dControlsStatic();// Call this when linking to MFC statically#endif可修改为:
#if _MSC_VER <= 1200 //VC6.0版本其前发行的版本,详见msdn #ifdef _AFXDLL Enable3dControls(); // Call this when using MFC in a shared DLL #else Enable3dControlsStatic(); // Call this when linking to MFC statically #endif#endif
- VC6.0工程转换到VS2010版本的常见问题
- VC6.0工程迁移到VS2010
- VC6.0工程升级到VS2010遇到问题及解决办法
- VC6.0工程升级到VS2010遇到问题及解决办法
- VC6.0工程升级到VS2010遇到问题及解决办法
- VC6.0工程升级到VS2010遇到问题及解决办法
- VC6代码移植到高版本VC时候的常见问题
- VC6.0项目转为VS2010遇到常见问题的解决方法
- [MFC] VS2013版本MFC工程移植到VC6.0上
- VC7到VC6工程的转换工具(转)
- VC7到VC6工程的转换工具(ZT)
- VC6.0工程升级到VS2010遇到问题及解决办法 【LNK2019】 无法解析的外部符号 __iob
- VC6工程转换到VC8(转载)
- VC6.0和VS2010工程大小区别
- VC6工程移植到VS2010里出现的序列化问题
- vc6.0,vs2003到vs2010字符集的问题
- vc6.0,vs2003到vs2010字符集的问题
- 将VC6.0工程做成release版本
- Redhat6.5安装MySQL5.6 RPM包
- python 中文乱码解决方法
- JS AJAX
- VMWare虚拟机中安装Redhat linux操作系统图解(2)
- 文章标题
- VC6.0工程转换到VS2010版本的常见问题
- 三大框架面试题
- 【算法设计与分析基础】关灯游戏
- DICOM:dcm4che工具包如何压缩dcm文件探讨(续篇)
- maven的安装以及配置仓库
- c++中的函数重载
- 油田统计
- 编程的入门(一)
- Java基础---JAVA基本数据类型,关键字