vc6项目-vc8项目 转换日志
此随笔参考了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项目 转换日志的更多相关文章
- springmvc 项目完整示例06 日志–log4j 参数详细解析 log4j如何配置
Log4j由三个重要的组件构成: 日志信息的优先级 日志信息的输出目的地 日志信息的输出格式 日志信息的优先级从高到低有ERROR.WARN. INFO.DEBUG,分别用来指定这条日志信息的重要程度 ...
- 多人开发的git项目如何保持提交日志为一条直线?
多人开发的git项目如何保持提交日志为一条直线? 一.Git的项目的git常用操作 a)Git clone 项目地址 从远程仓库克隆项目到本地 b)Git pull 从当前分支拉取更新代码 c)Git ...
- springmvc 项目完整示例05 日志 --log4j整合 配置 log4j属性设置 log4j 配置文件 log4j应用
log4j 就是log for java嘛,老外都喜欢这样子,比如那个I18n ---internationalization 不就是i和n之间有18个字母... http://logging.a ...
- java web项目由http转换成https遇到的各种坑
java web项目由http转换成https遇到的各种坑 这篇文章写给自己在经历项目由http转换成https遇到的各种坑所做的一份笔记,留给以后自己看,或者和开发的朋友也刚好遇到和我一样的问题的朋 ...
- vc6.0的项目如何在整个项目中查询内容呢?试试vs2015
vc6.0的项目如何在整个项目中查询内容呢?试试vs2015 https://blog.csdn.net/txwtech/article/details/101308795
- 在Go语言项目中使用Zap日志库
在Go语言项目中使用Zap日志库 本文先介绍了Go语言原生的日志库的使用,然后详细介绍了非常流行的Uber开源的zap日志库,同时介绍了如何搭配Lumberjack实现日志的切割和归档. 在Go语言项 ...
- 【Saas-export项目】--项目整合(spring整合MVC)
转: [Saas-export项目]--项目整合(spring整合MVC) 文章目录 Spring整合SpringMVC(export_web_manager子工程) (1)log4j.propert ...
- eclipse导入web项目之后项目中出现小红叉解决办法
项目中有小红叉我遇到的最常见的情况: 1.项目代码本身有问题.(这个就不说了,解决错误就OK) 2.项目中的jar包丢失.(有时候eclipse打开时会出现jar包丢失的情况,关闭eclipse重新打 ...
- HR外包系统 - 员工项目 薪资项目 考勤项目 -管理
项目管理-包括员工项目 薪资项目 考勤项目 一 后台总公司定义项目-前台分公司选择项目,定义别名-分公司客户选择员工项目,定义别名 分公司下面-新建薪资类别-薪资类别下面选择要的薪资和考勤项目. 二 ...
随机推荐
- Hibernate关系映射(三) 多对多
一.使用用户User和Role实现多对多的示例 User.java,实现对Role的引用 package com.lxit.entity; import java.util.HashSet; impo ...
- 2019pycharm破解大法
通过激活码激活Pycharm 1 先找到你的hosts文件: Windows电脑:c:\windows\system32\drivers\etc Linux/Mac电脑:/etc 2 编辑hosts文 ...
- Win10注销在哪?怎么注销电脑
进入Win10电脑桌面,同时按住键盘上的[Alt]+[F4]组合快捷键,可以快速呼出[关闭Windows]操作选项,在下面的"您希望计算机所什么"里选择[注销],然后点击底部的[确 ...
- C# 重载和默认参数(那种情况下使用更好)
当你提供函数,外部因为要传入不同参数个数,重载会导致 外部if增加, 默认参数可以消除外部的if.当外部调用函数需要判断调用那个函数,根据调用次数增多 if跟着调用持续增多两种不同的调用 //重载 ...
- Drupal的system_list()函数解析
system_list()函数的目的是根据传入的资源类型,返回一个数组列表: function system_list($type) { ... ... } 参数$type支持下面三种类型: boot ...
- Win7 + vs2012 + cocos2d-x2.2 配置开发环境
昨天開始打算学习Cocos2d-x,首先肯定是要在自己的电脑上配置开发环境.昨天折腾了一天,以下将自己在当中遇到的问题与解决方法跟大家分享一下.大多数会遇到的问题,我都遇到了.... 1.安装 ...
- Django中使用haystack进行全文检索时需要注意的坑
对于haystack的配置什么的我在这里就不必说什么了,毕竟一搜一大把. 直接说重点 1 当你通过继承haystack的views来自定义django 应用的views 时,你要注意heystack ...
- jmeter ---测试TCP服务器/模拟发送TCP请求
jmeter测试TCP服务器/模拟发送TCP请求 jmeter测试TCP服务器,使用TCP采样器模拟发送TCP请求. TCP采样器:打开一个到指定服务器的TCP / IP连接,然后发送指定文本并等待响 ...
- selenium2.0 --常用函数2
新建实例driver = webdriver.Chrome() 1.获取当前页面的Url函数 方法:current_url 实例: driver.current_url 2.获取元素坐标 方法:loc ...
- 使用DataAdpater自动批量更新DataSet中的数据到数据库
使用DataAdpater的批量更新,好处是不用写具体的sql脚本,尤其是做web服务这个优势非常吸引人. [WebMethod(Description = "Update服务提供的方法,将 ...