下列为VC6.0 工程转到VS2008一些问题的描述及解决方法

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
1. warning:   D9035 : Fr"选项已否决,并将在将来的版本中移除
              D9036 : 使用“FR”而不使用“Fr"

解决方法:
     设置Project propert\C/C++\浏览信息\启用浏览信息\“无本地符号(/Fr)"---->"包含所有浏览信息(/FR);

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
2. warning : WINVER not defined. Defaulting to 0x0600(Windows Vista)

Answer:
#define WINVER 0x0400  
0x0400 is for Windows NT 4.0. For Windows 2000 use 0x0500
Note: Define it for the lowest operating system you need your app to run on, not the OS you build on.
It defaulted to 0x0501 because you build on XP but defining it as 0x0400 will allow it to run on Windows 2000 as well.
example: In StdAfx.h 开始时写入:
#ifndef   WINVER
#define   WINVER   0x0500
#endif

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
3.warning: CWinApp:: Enable3dControls() is no long need.

这两个函数的调用是旧的MFC版本对新版本的操作系统特性的支持,在新的(那个时候是新的)Windows 95平台上要这样调用一下才能使用新的Windows 3D样式的控件,否则就是老的Win 3.2样子的控件。想当初喜欢OWL就是因为感觉它的控件比较“酷”,比如那个带底纹的对话框,菱形的checkbox,还有带图标的“OK”按钮,看到MFC作出来的灰灰的界面就觉得土,不过后来就知道MFC做界面也是很漂亮的,比如我做的。。。。,再打住。对于新的MFC版本来说已经不需要再调用这两个函数了,参考前面的方法,用_MSC_VER对其隔离就行了:

#if _MSC_VER <= 1200 // MFC 6.0 or earlier
   #ifdef _AFXDLL
       Enable3dControls();           // Call this when using MFC in a shared DLL
   #else

  Enable3dControlsStatic();   // Call this when linking to MFC statically
   #endif
#endif

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
4.warning C4819: The file contains a character that cannot be represented in the current code page (936). Save the file in Unicode format to prevent data loss

1. VS2008打开相应文件,再保存一遍就好了。
2. 试一下,文件中某些地方用到的空格不是Unicode的。打开那个文件,如果文件顶层注释上面有一个空行,就把它删了试试!也需有用哦
(1)转换Code文件为Unicode格式;
(2)在Project -> Properties -> Configuration Properties -> C/C++ -> Advance 的 Disable Specific Warnings 中添加相应的警告编号:4819;
(3)或找出不符合Unicode格式的文件,然后在该文件的开始处加入下面的语句:# pragma warning (disable:4819)

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
5. error C2440: ’static_cast’ : cannot convert from ‘UINT (__thiscall CStaticLink::* )(CPoint)’ to ‘LRESULT (__thiscall CWnd::* )(CPoint)’

If you are updating from VS2003 to VS2005, C++, you might run across an error like this. What it means is that they changes the return types from 2003 to 2005. You just need to change the UINT to an LRESULT and you should be good to go.

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
6. error : "无法开启MFC42.lib"

(推荐方法1)
1.如果主工程下用到了一些DLL,这些DLL 是在VC6.0下编出来的,我们需要这些DLL 也在VS2008重新编译。否则在Windows7 下编译主工程会有找不到MFC42.lib 等错误。
2. 选择静态链接MFC;

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
7.处理Manifest问题
  VS2005,2008工程需要使用Manifest文件,记录“工程依赖项”。所以必须要生成Manifest文件。
  设置:Project propert\ linker\ Manifest\ 生成清单:是。
        Project propert\ linker\ Manifest Tool\ 嵌入清单:是。
(VC6.0 没有嵌入清单的功能。需要我们自己写出Manifest放入工程,然后编入工程资源中或者放入应用程序层。但是VS2005,2008有自动生成及嵌入清单的功能)

Manifest 文件还有一些功能: 1.设定程序运行用户权限; 2. 支持Microsoft.Windows.Common-Controls.
  1. 设定程序运行用户权限: 设置Project propert\ linker\ Manifest\ 启用用户帐户控制(UAC):是;
                                                                  UAC 执行极别:asInvoker (默认值);
                                                                  UAC 绕过UI保护:否;

//////////////////////////////////////////////////////////////////////////////////////////////////////////////
 2.支持Microsoft.Windows.Common-Controls.
   分几种情况:如果用VS2008  则在生成工程向导中,在“高级功能设定中”,勾选“公共控件清单”项。然后编译工程时按照上述方式选择“生成清单”。清单自动生成并包含支持Microsoft.Windows.Common-Controls.

如果创建工程时,没有设置此选项,我们可以后期在Project propert\ linker\ Manifest\ 附加清单依赖项:
添加type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='X86' publicKeyToken='6595b64144ccf1df' language='*'

从VC6.0升级到VS2008的工程。因为VC6.0的Manifest文件是外部的。 VS2008默认是自动生成嵌入式Manifest.所以两个会发生冲突:

error :  CVTRES : fatal error CVT1100: duplicate resource. type:MANIFEST, name:2, language:0x0409
             LINK : fatal error LNK1123: failure during conversion to COFF: file invalid or corrupt

(推荐解决方案3)
解决方案:1. Project propert\ linker\ 启用增量链接:否;(关闭增量链接)
          2. 设置工程属性->配置属性-> 清单工具->输入和输出->嵌入清单,选择[否]
          3. 在工程的.rc文件里面删除了manifest块. 删除VC6.0外部Manifest文件。设置生成嵌入式清单,并在附加清单依赖项:  Microsoft.Windows.Common-Controls。
              (有什么时候删除VC6.0外部Manifest文件后,编译会出现问题: 嵌入清单:否;编译。。
                                                                        删除manifest块和VC6.0外部Manifest文件。编译。
                                                                        嵌入清单:是;编译。
                 这个方法或许可以解决 “删除VC6.0外部Manifest文件问题”。不肯定,请多试。             
                )

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

8.warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.

这个问题是C语言里面某些函数的安全性检查通不过。消除Warning信息方法:

(1)按照编译器推荐的把函数改为安全的。例如:strcpy改为strcpy_s;itoa改为_itoa_s等等;

(2)或设置Project -> Properties -> Configuration Properties -> c/c++ -> Preprocessor -> Preprocessor Definitons里面添加 _CRT_SUCURE_NO_WARNINGS / _CRT_SUCURE_NO_DEPRECATE

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
error LNK2019: unresolved external symbol "wchar_t * __stdcall _com_util::Co.....
解决方法,
 Property page ->C/C++ ->Language ->treat Wchar-t  改为 No

=======================================================================================

1.

lesson 8
组合框测试:格式->测试对话框;esc退出;
又出现了“ID_PROP”:未声明的标识符,直接把#include "Resource.h"加到"stdafx.h"里;
又出现了为类添加虚函数,在类属性窗口中选择“重写”项添加即可;

2.
error C2146: 语法错误 : 缺少“;”(在标识符“PVOID64”的前面)

改动SDK的头文件,不是一个好的办法,会降低代码的移植性。

在stdafx.h的开头,加上如下代码:

#ifndef POINTER_64

#if !defined(_MAC) && (defined(_M_MRX000) || defined(_M_AMD64) || defined(_M_IA64)) && (_MSC_VER >= 1100) && !(defined(MIDL_PASS) || defined(RC_INVOKED))
#define POINTER_64 __ptr64
typedef unsigned __int64 POINTER_64_INT;
#if defined(_WIN64)
#define POINTER_32 __ptr32
#else
#define POINTER_32
#endif
#else
#if defined(_MAC) && defined(_MAC_INT_64)
#define POINTER_64 __ptr64
typedef unsigned __int64 POINTER_64_INT;
#else
#if (_MSC_VER >= 1300) && !(defined(MIDL_PASS) || defined(RC_INVOKED))
#define POINTER_64 __ptr64
#else
#define POINTER_64
#endif
typedef unsigned long POINTER_64_INT;
#endif
#define POINTER_32
#endif

#endif

=================================================================================

1.
WINVER not defined. Defaulting to 0x0600 (Windows Vista)
#ifndef WINVER                          // Specifies that the minimum required platform is Windows Vista.
         #define WINVER 0x0501          // Change this to the appropriate value to target other versions of Windows.
         #endif

添加上面代码到stdafx.h中
2.
error C2259: “CException”: 不能实例化抽象类
MFC较好地将异常封装到CException类及其派生类中,自成体系,下表给出了MFC 提供的预定义异常:CMemoryException:内存不足
CFileException:文件异常
CArchiveException:存档/序列化异常
CNotSupportedException:响应对不支持服务的请求
CResourceException:Windows 资源分配异常
CDaoException:数据库异常(DAO 类)
CDBException:数据库异常(ODBC 类)
COleException:OLE 异常
COleDispatchException:调度(自动化)异常
CUserException:用消息框警告用户然后引发一般 CException 的异常
所以只要把上面的CException与异常类相对应的.比如文件异常,改成CFileException.
代码中采用将所有的CException改成了CFileException
3.
无法解析的外部符号 _main,该符号在函数 ___tmainCRTStartup 中被引用
1.菜单中选择 Project->Properties, 弹出Property Pages窗口
2.在左边栏中依次选择:Configuration Properties->C/C++->Preprocessor,然后在右边栏的Preprocessor Definitions对应的项中删除_CONSOLE, 添加_WINDOWS.
3.在左边栏中依次选择:Configuration Properties->Linker->System,然后在右边栏的SubSystem对应的项改为Windows(/SUBSYSTEM:WINDOWS)
4.Rebuild All. Ok ?
4.
error C2039: “WriteHuge”: 不是“CFile”的成员
error C2039: “ReadHuge”: 不是“CFile”的成员
把Huge去掉即

VC6.0 工程转到VS2010一些问题的描述及解决方法的更多相关文章

  1. VC6.0启动File-open和Project-add file to project崩溃的解决方法

    最近由于装了Office2010,VC6.0被整残了,file->open 和 Project->add file to project不能用,一用VC6.0就崩溃,查到是由于office ...

  2. vc6.0创建文件时,出现很多烫烫烫解决方法

    vc6.0创建文件时,出现很多烫烫烫烫解决方法 SWM2烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫.IA 如果项目文件放在桌面上 如:C:\Documents and Settings\txwtec ...

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

    每个人在面对新的事物的时候,总是充满了排斥感,当vista和win7来临的时候,我们还在留恋xp,说xp是如何的好,win7是如何的不给力,当然,我们必须承认,xp是一款优秀的操作系统,这个我们无法否 ...

  4. VC6.0中友元函数无法访问类私有成员的解决办法

    举个例子: 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 #inclu ...

  5. VC++6.0 add files to project 造成Visual Studio崩溃的解决方法

    1.下载filetool.exe,然后将文件解压在一个小文件夹内2.打开filetool.dsw 在release模式下编译程序,复制filetool.dll3.放在VC6.0安装目录AddIns的下 ...

  6. unity3d首次倒入工程文件出错Opening file Library/FailedAssetImports.txt failed解决方法

    打开unity3d,首次倒入工程到unity编辑器,但是频繁弹出“Opening file Library/FailedAssetImports.txt failed”的错误对话框,很麻烦. 解决方法 ...

  7. ubuntu安装依赖:0.8.1-1ubuntu4.4 正要被安装以及vm nested解决方法

    刚才在ubuntu10.04虚拟机上安装kvm,提示0.8.1-1ubuntu4.4 正要被安装,查了一下,有一种解决方法: 进入“系统->系统管理->更新管理器->设置”,在弹出的 ...

  8. WIN7下vs2010滑轮滚动不正确的解决方法

    win7下vs2010在滚动滑轮时文档滚动条不滚动而是解决方案的滚动条滚动的解决方法, 控制面板>设备和打印机>鼠标设置>滚轮选项卡里面将滚轮功能设置设为只使用office97预设的 ...

  9. VC6.0工程改名(转)

    只讨论对工程改名,其他文件和类的名字不改变,否则就很麻烦了.  操作步骤:   (1)删除 .dsw 文件.改好了会再自动生成的: (2)以写字板或记事本方式打开.dsp文件: (3)将其中所有的原工 ...

随机推荐

  1. ThoughtWorks(中国) 程序员读书雷达

    ThoughtWorks(中国)程序员读书雷达 软件业的特点是变化.若要提高软件开发的技能,就必须跟上技术发展的步伐.埋首醉心于项目开发与实战,固然能够锤炼自己的开发技巧,却难免受限于经验与学识.世界 ...

  2. PHP环境变量归纳(转自网络)

    PHP环境变量主要有$GLOBALS[].$_SERVER[].$_GET[].$_POST[].$_COOKIE[].$_FILES[].$_ENV[].$_REQUEST[].$_SESSION[ ...

  3. 淘宝开放平台php-sdk测试 获取淘宝商品信息(转)

    今天想使用淘宝开放平台的API获取商品详情,可是以前一直没使用过,看起来有点高深莫测,后然看开发入门,一步一步,还真有点感觉了,然后看示例,还真行了,记下来以后参考.其中遇到问题,后然解决了.因为我已 ...

  4. IBM db2安装好了以后,启动不了服务

    系统默认将Server服务禁用,开启这个服务就可以启动服务.

  5. 磁盘检测SMART工具

    题记: 做过一些关于硬盘的调研任务,当时搜集很多资料,不过现在没有,从网上找了一篇关于SMART的介绍,感觉基本上都是比较全面了. 首先各大硬盘厂商生产的硬盘基本都是会遵循SMART的技术标准的,当然 ...

  6. Python赋值魔法技巧

    实验环境: [root@localhost ~]# python -V Python 2.7.5 1.序列解包 多个赋值操作可以同时进行 >>> x,y,z = 1,2,3 > ...

  7. ubuntu service XXX start启动报start: Rejected send message, 1 matche

    service cron restart命令报错如下: stop: Rejected send message, 1 matched rules; type="method_call&quo ...

  8. XShell 连接虚拟机中的服务器 失败 、连接中断(Connection closed by foreign host.)

    在使用XShell连接虚拟机中的服务器时,报以下错误并断开连接,之前连接还是挺稳定的,忽然就这样了 Last login: Thu Aug :: from 192.168.1.102 [root@no ...

  9. 【原创】cocos2d-x3.9蓝牙开发之蓝牙开启

    本人第一次搞android开发,很多东西都是只知道一点点,然而都没怎么实践过,所以这次就边学边做自己想要的功能,可能会花较长时间,不过肯定是值得的,有用词或哪里说得不对的请指正. 我自己有androi ...

  10. python-多线程趣味

    假设一个程序员,想听歌,但是又想敲代码,于是又: 我听完歌就去敲代码: #! /usr/bin/env python #coding=utf-8 import time def matter1(mus ...