此随笔参考了http://blog.163.com/feng_qihang/blog/static/7129199120093422722430/

把VC6的项目转换成VS2005项目,经过VS2005的自动转换后,进行编译,遇到了很多问题,记录如下。

1. 变量声明。

由于编译器对C++标准支持的差异,在 for 之类的语句里的变量的声明容易引起编译错误,比较常见。

2.MFC消息函数返回值。

有些消息函数应该把返回值类型从void或者UINT改成LRESULT,把参数类型从UNIT或者LONG改成WPARAM、LPARAM。例如:

//VC6
afx_msg virtual void OnGraphModified(UINT wParam, LONG lParam); //VC8
afx_msg virtual LRESULT OnGraphModified(WPARAM wParam, LPARAM lParam);

3. 类型转换问题。

1) 类型检查在vc8里更严格。所以很多类型不符方面的警告,需要强制转换。即使int和unsigned int的比较都会是个警告。

2) 有些库函数,在VC6和VC8中,返回类型不一致。例如:_tcschr,在VC6和VC8中的定义分别为:

//VC6
__inline char * _tcschr(const char * _s1,unsigned int _c) //VC8
_CRTIMP __checkReturn _CONST_RETURN char * __cdecl strchr(__in_z const char * _Str, __in int _Val);

所以,会出现如下修改:

//VC6
LPTSTR p =_tcschr(s, _T(',')); //VC8
LPTSTR p = (LPTSTR)_tcschr(s, _T(','));

4. 引用DLL 问题。

如果工程中引用了第三方的库,那么第三方库也需要在VS2005下编译,然后再一起链接、使用。

5. DialogBar初始化。

在VC6中,CDialogBar::HandleInitDialog方法在成功时返回TRUE,在失败时返回FALSE。而在VC8中,该方法始终返回FALSE。所以,如果在VC6程序中,有判断CDialogBar::HandleInitDialog方法返回值的代码,升级到VS2005时需要注释掉。

在VC6、VC8中,方法的源码如下:

//VC6
LRESULT CDialogBar::HandleInitDialog(WPARAM, LPARAM)
{
Default(); // allow default to initialize first (common dialogs/etc) // create OLE controls
COccManager* pOccManager = afxOccManager;
if ((pOccManager != NULL) && (m_pOccDialogInfo != NULL))
{
if (!pOccManager->CreateDlgControls(this, m_lpszTemplateName, m_pOccDialogInfo))
{
TRACE0("Warning: CreateDlgControls failed during dialog bar init.\n");
return FALSE;
}
} return TRUE;
} //VC8
LRESULT CDialogBar::HandleInitDialog(WPARAM, LPARAM)
{
Default(); // allow default to initialize first (common dialogs/etc) // create OLE controls
COccManager* pOccManager = afxOccManager;
if ((pOccManager != NULL) && (m_pOccDialogInfo != NULL))
{
if (!pOccManager->CreateDlgControls(this, m_lpszTemplateName, m_pOccDialogInfo))
{
TRACE(traceAppMsg, , "Warning: CreateDlgControls failed during dialog bar init.\n");
return FALSE;
}
} return FALSE;//-----区别在这里
}

下面的问题是http://blog.163.com/feng_qihang/blog/static/7129199120093422722430/中提到,而我没有遇到的问题,记录下来,方便以后用。

6. 函数返回值。

VC8对函数返回值检查比较严格。比如,函数定义为返回某个类的引用,那么返回NULL在VC6中是可以编译通过,但在VC8中不行。

这应该是类型检查更严格的问题。

7. 标准函数被编译出警告 “被声明为否决”。

解决方法:根据编译器输出提示,到声明该函数的h文件中,找到该函数对应的名称,修改成新名称即可。例如,hypot,需要修改成_hypot。

8. BSCMAKE :1506

网上可以搜索到解决方法。修改:工程属性-》配置属性-》c/c++-》浏览信息 启用浏览消息 无

9. fatal error C1189: #error :  Please use the /MD switch for _AFXDLL builds

工程设置的问题。工程属性-》配置属性-》c/c++-》代码生存-》运行时库 改成MD 方式。

vc6项目-vc8项目 转换日志的更多相关文章

  1. springmvc 项目完整示例06 日志–log4j 参数详细解析 log4j如何配置

    Log4j由三个重要的组件构成: 日志信息的优先级 日志信息的输出目的地 日志信息的输出格式 日志信息的优先级从高到低有ERROR.WARN. INFO.DEBUG,分别用来指定这条日志信息的重要程度 ...

  2. 多人开发的git项目如何保持提交日志为一条直线?

    多人开发的git项目如何保持提交日志为一条直线? 一.Git的项目的git常用操作 a)Git clone 项目地址 从远程仓库克隆项目到本地 b)Git pull 从当前分支拉取更新代码 c)Git ...

  3. springmvc 项目完整示例05 日志 --log4j整合 配置 log4j属性设置 log4j 配置文件 log4j应用

    log4j 就是log for java嘛,老外都喜欢这样子,比如那个I18n  ---internationalization  不就是i和n之间有18个字母... http://logging.a ...

  4. java web项目由http转换成https遇到的各种坑

    java web项目由http转换成https遇到的各种坑 这篇文章写给自己在经历项目由http转换成https遇到的各种坑所做的一份笔记,留给以后自己看,或者和开发的朋友也刚好遇到和我一样的问题的朋 ...

  5. vc6.0的项目如何在整个项目中查询内容呢?试试vs2015

    vc6.0的项目如何在整个项目中查询内容呢?试试vs2015 https://blog.csdn.net/txwtech/article/details/101308795

  6. 在Go语言项目中使用Zap日志库

    在Go语言项目中使用Zap日志库 本文先介绍了Go语言原生的日志库的使用,然后详细介绍了非常流行的Uber开源的zap日志库,同时介绍了如何搭配Lumberjack实现日志的切割和归档. 在Go语言项 ...

  7. 【Saas-export项目】--项目整合(spring整合MVC)

    转: [Saas-export项目]--项目整合(spring整合MVC) 文章目录 Spring整合SpringMVC(export_web_manager子工程) (1)log4j.propert ...

  8. eclipse导入web项目之后项目中出现小红叉解决办法

    项目中有小红叉我遇到的最常见的情况: 1.项目代码本身有问题.(这个就不说了,解决错误就OK) 2.项目中的jar包丢失.(有时候eclipse打开时会出现jar包丢失的情况,关闭eclipse重新打 ...

  9. HR外包系统 - 员工项目 薪资项目 考勤项目 -管理

    项目管理-包括员工项目 薪资项目 考勤项目 一 后台总公司定义项目-前台分公司选择项目,定义别名-分公司客户选择员工项目,定义别名 分公司下面-新建薪资类别-薪资类别下面选择要的薪资和考勤项目. 二 ...

随机推荐

  1. Entity Framework底层操作封装V2版本号(1)

    由于同志们一直给我提建议说.曾经发的版本号有问题.所以经过了我这一年多的使用和扩展,如今方法基本稳定了. 如今贴出来给大家使用: 首先上场的是数据库操作层: using System; using S ...

  2. 基于SpringBoot的Environment源码理解实现分散配置

    前提 org.springframework.core.env.Environment是当前应用运行环境的公开接口,主要包括应用程序运行环境的两个关键方面:配置文件(profiles)和属性.Envi ...

  3. stylus

    stylus介绍 是个什么鬼?对于开发来说,CSS的弱点在于静态化.我们需要一个真正能提高开发效率的工具, LESS , SASS 都在这方面做了一些贡献. Stylus 是一个CSS的预处理框架,2 ...

  4. [LeetCode] Add Two Numbers(stored in List)

    首先,演示一个错误的reverList class Solution { public: ListNode* reverse(ListNode* root) { if(NULL == root) re ...

  5. 自己Cookie写的自动登录功能 包含BASE64 和MD5的使用

    sql表 username  password字段 User类 有 id username password等字段 Service有一函数 @Override public User findUser ...

  6. Struts2中的变量

    <package name="mypackage" extends="struts-default"> <global-results> ...

  7. Git使用总结 Asp.net生命周期与Http协议 托管代码与非托管代码的区别 通过IEnumerable接口遍历数据 依赖注入与控制反转 C#多线程——优先级 AutoFac容器初步 C#特性详解 C#特性详解 WPF 可触摸移动的ScrollViewer控件 .NET(C#)能开发出什么样的APP?盘点那些通过Smobiler开发的移动应用

    一,原理 首先,我们要明白Git是什么,它是一个管理工具或软件,用来管理什么的呢?当然是在软件开发过程中管理软件或者文件的不同版本的工具,一些作家也可以用这个管理自己创作的文本文件,由Linus开发的 ...

  8. Freeswitch中文用户手册(第四章 SIP)----2

    通过 B2BUA 呼叫 在真实世界中,bob 和 alice 肯定要经常改变位置,那么它们的 SIP 地址也会相应改变,并且,如果他们之中有一个或两个处于 NAT 的网络中时,直接通信就更困难了.所以 ...

  9. [k8s]kubelet最佳实战

    kubelet端口解析: 10250 –port: kubelet服务监听的端口,api会检测他是否存活 10248 –healthz-port: 健康检查服务的端口 10255 –read-only ...

  10. nginx 查看访问 IP 并封禁 IP 详解

    1.查找服务器所有访问者ip方法: awk '{print $1}' nginx_access.log |sort |uniq -c|sort -n nginx.access.log 为nginx访问 ...