几个VC6.0到VC9.0的错误解决方案
几个VC6.0到VC9.0的错误解决方案
说起现在这个引擎吧,总是没有太多时间去写,不过在半个月前就已经完成了,而且在VC6.0上是完全通过的,两个DEMO的运行也完全正常,昨天学人家追追新流,一改往日的固执,装了个VC9.0,结果出了几十个Warning,还有15个ERROR,这些都是因为VC6.0到VC9.0的转换上,还有处理规则有所变动产生了.如下是我的解决方案,希望对大家有所帮助,因为这个引擎目前还不到发布时间,所以不会有大量的源码帖出,敬请原谅:
1.C4430和C4996警告,因为我们是在/W3下Debug,所以会出现好多这种Warning,根据我的经验,如果我们对自己的代码和DEMO非常有信心的情况下,这些警告是多余的,我们真正要去解决的是ERRORs,所以我们先把WARNING全都去了,要不然看着让人烦.....
方法非常简单: 在命令列加入/wd4430 /wd4996,.....是不是非常简单,
好了,现在把这几十个WARNING的编译信息去掉后,看着就不烦了,心情好多了.留给我们接下来真正要解决的东西出如下:
2.error C2440: 'return' : 無法由 'void' 轉換為 'int' :
产生这种错误的原因吧,我开始也进入了误区,我直接回头去检查代码里的RETURN,浪费了不少时间,其实这个错误是因为,在Standard C++程式库中所执行的一致性和更新工作产生的.源码如下:
// 设置音效音量
inline SetEffectVolume(float fVolume)
{ return SetGroupVolume(fVolume, m_lstEffect); } //C2240
在Standard C++下,是不会自动去转换的,其实这不是我们代码的问题,是VC7.0开始的一个检查更改,我们要做的就是迎合VC9.0就行,不必大幅改动我们的代码部分,方案如下:
// 设置音效音量
void SetEffectVolume(float fVolume)
{ return SetGroupVolume(fVolume, m_lstEffect); } //It's OK.....
3. error C3867: 'MyForm::ButtonCtrlClick': 函式呼叫遺漏引數清單,請用 '&MyForm::ButtonCtrlClick' 建立成員的指標
其实这也是VS2005之后的一个更变引起的.对VC++2005的编译器完成一致性处理后也可能会产生这种错误:增强型成员指标一致性.
//代码如下:
// Panel2 setting
Panel2.Create(this, 545, 0, pan2bg);
ButtonGame.Create(&Panel2, 49, 128, btnbig, "游戏性(G)");
ButtonGame.SetDownOffset(-1, 3);
ON_CLICK(&ButtonGame, ButtonCtrlClick); //C3867
ButtonVideo.Create(&Panel2, 49, 187, btnbig, "图像(V)");
ButtonVideo.SetDownOffset(-1, 3);
ON_CLICK(&ButtonVideo, ButtonCtrlClick);//C3867
ButtonSound.Create(&Panel2, 49, 246, btnbig, "声音(S)");
ButtonSound.SetDownOffset(-1, 3);
ON_CLICK(&ButtonSound, ButtonCtrlClick);//C3867
VS2005以后,在建立指标时,必须用&来建立和传递,哎,还真麻烦,不过这种较以往的会更安全.所以不要报怨,这种考虑是必要的.呵呵,微软还挺周道的.不错,小小表扬一下.如果用微软给的方法来解决,很麻烦,我这人向来比较懒,所以我用的方法是,ON_CLICK(&ButtonVideo, ButtonCtrlClick());//It's OK...
4.error C2440: '<function-style-cast>' : 無法由 'void' 轉換為 'GEng::NotifyFun'
我不废话了,还是一个RETURN的检查引起的问题.改吧....
可能性1:宏定义在导入VC9.0时顺序换了位.在MAIN.CPP前面加上宏定义头文件"GENG_GUIOBJ.H",错误依旧
可能性2:宏定义里地址传递上,方法不能在VC9.0里体现.
typedef void (GEngControl::*NotifyFun)(void); //定义部分代码
struct NotifyEvent
{
NotifyEvent() : function(NULL), invoker(NULL) {}
NotifyFun function;
GEngControl *invoker;
}; //没有类型转换过程.....查看控件定义里....
//控件定义部分代码:
#define ON_CLICK(obj, fun) /
{ /
(obj)->OnClick.function = NotifyFun(fun); / //C2440
(obj)->OnClick.invoker = this; /
}
在这里,只有一种方法可行,也必须这么改,如果没有经验的话,一般不知道如何下手.方案如下:
(obj*)->OnClick.function = NotifyFun(fun); / //C2440
(obj*)->OnClick.invoker = this; /
到此为止,终于成功地从VC6.0转到了VC9.0上.
总结:其实VC的高版本改变往往是为了更安全,为了我们的程序在编译成功后运行更建全考虑的,不要怕麻烦,不要一出错就换低版本的,呵呵....
牙疼两天了,今天还没吃饭呢,好饿,但牙不争气,看见饭就烦.先写这么多吧.有什么问题,留言就行了.大家一起研究,我的GEng2D游戏引擎总算在VC9.0上安了家,还出了DEBUG版.明天看有时间把DEMO也在VC9.0编译一下不,然后发出来,让大家指教指教......
几个VC6.0到VC9.0的错误解决方案相关推荐
- VC6工程转VC9工程常见错误
转载:VC6工程转VC9工程常见错误 1. error C2065: 'i' : undeclared identifier for循环体定义的循环变量只能在for循环体内使用.例如: for (in ...
- 32/64位Windows 7 下VC9.0编译boost::regex,带ICU
首先,我的是VC9.0,对应的是ICUC4C 4.4.2版本,要先去ICU的主页上下载ICU4C 4.4.2,只需要下载编译好的包就行了. 32位 http://download.icu-projec ...
- 从.NET1.1升级到.NET2.0时出现的PInvokeStackImbalance错误
从.NET1.1升级到.NET2.0时出现的PInvokeStackImbalance错误 微软官方的解释(http://msdn2.microsoft.com/zh-cn/library/0htdy ...
- 基于【CentOS-7+ Ambari 2.7.0 + HDP 3.0】搭建HAWQ数据仓库01 —— 准备环境,搭建本地仓库,安装ambari...
一.集群软硬件环境准备: 操作系统: centos 7 x86_64.1804 Ambari版本:2.7.0 HDP版本:3.0.0 HAWQ版本:2.3.0 5台PC作为工作站: ep-bd01 ...
- 积少成多 Flash(ActionScript 3.0 Flex 3.0) 系列文章索引
[源码下载] 积少成多 Flash(ActionScript 3.0 & Flex 3.0) 系列文章索引 作者:webabcd Flash 之 ActionScript 3.0 1.积少成 ...
- 一文看懂模糊搜索1.0到3.0的算法迭代历程
参加 2019 Python开发者日,请扫码咨询 ↑↑↑ 作者 | 宋广泽 责编 | 郭芮 来源 | CSDN(ID:CSDNnews) 前一段时间在Linux上用C语言做了一个信息管理系统,初始版本 ...
- 为什么 HashMap 加载因子一定是0.75?而不是0.8,0.6?
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 有很多东西之前在学的时候没怎么注意,笔者也是在重温HashMap的 ...
- 127.0.0.1和0.0.0.0地址的区别
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 1. 问题引入 之前在使用tomcat的时候,启动tomcat默认 ...
- 一个有趣的实验:用0.1f 替换 0,性能提升 7 倍!
点击关注上方"视学算法",设为"置顶或星标",第一时间送达技术干货. 本文来源:http://cenalulu.github.io/linux/about-de ...
最新文章
- python numpy矩阵运算加速器 NumExpr
- java nio 应用场景_BIO、NIO、AIO简述及应用场景
- 关于Unity实现AR功能(四)设置相机的对焦
- Hash冲突处理终极版
- Jquery和雅虎的YQL服务实现天气预报功能!
- 苹果多款产品加征关税至15% 目前售价暂无影响
- linux 可以ping 通 windows ,windows ping 不了 linux
- HttpServletResponse(打开图片)
- solidworks电气元件3d库_丨部件库丨西门子3RV6电机保护开关
- 电子技术应用课程设计
- NDK OpenGL ES 3.0 开发(五):FBO 离屏渲染
- 理财投资 之 基金投资 - #1篇:基金基础知识扫盲
- 制作仅在xy方向有周期性的夹层结构,且不使用约束平板
- ndnSIM学习(四)——examples之ndn-simple.cpp超详细剖析
- TIA博途中如何设计报警功能块FB,来简化编写离散量报警程序的时间?
- 首批最佳骑行路线揭晓
- 回顾2022年计算机视觉领域最激动人心的进展
- 云服务器上传文件怎么这么慢,百度云上传速度慢怎么办?教你如何加快百度云上传速度...
- py附带协议头post上传图片
- PHP 打印支票,用Access2007解决支票打印的日期大写问题
热门文章
- 【Code】Python金字塔模型的实现(Pyramid)
- 什么是BGP,一般机房的BGP是什么意思?
- 神经网络与深度学习笔记(二)正向传播与反向传播
- CS61A fa2021 Composing Programs 2.8 Efficiency 效率
- (PTA)6-7 使用函数计算两个复数之积 (10分)
- iOS MVC设计模式
- 计算机视觉博士去向,为什么现在不看好 CV 方向了呢?
- 通过网络安装CentOs7
- correl函数相关系数大小意义_Excel使用Correl函数返回相关系数并确定属性关系的步骤方法...
- 通过过滤器Filter来完成url访问权限限制