几个VC6.0到VC9.0的错误解决方案

技术研究    2008-04-12 13:21   阅读794   评论2  
字号: 大   中   小

说起现在这个引擎吧,总是没有太多时间去写,不过在半个月前就已经完成了,而且在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的错误解决方案相关推荐

  1. VC6工程转VC9工程常见错误

    转载:VC6工程转VC9工程常见错误 1. error C2065: 'i' : undeclared identifier for循环体定义的循环变量只能在for循环体内使用.例如: for (in ...

  2. 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 ...

  3. 从.NET1.1升级到.NET2.0时出现的PInvokeStackImbalance错误

    从.NET1.1升级到.NET2.0时出现的PInvokeStackImbalance错误 微软官方的解释(http://msdn2.microsoft.com/zh-cn/library/0htdy ...

  4. 基于【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 ...

  5. 积少成多 Flash(ActionScript 3.0 Flex 3.0) 系列文章索引

    [源码下载] 积少成多 Flash(ActionScript 3.0 & Flex 3.0) 系列文章索引 作者:webabcd Flash 之 ActionScript 3.0  1.积少成 ...

  6. 一文看懂模糊搜索1.0到3.0的算法迭代历程

    参加 2019 Python开发者日,请扫码咨询 ↑↑↑ 作者 | 宋广泽 责编 | 郭芮 来源 | CSDN(ID:CSDNnews) 前一段时间在Linux上用C语言做了一个信息管理系统,初始版本 ...

  7. 为什么 HashMap 加载因子一定是0.75?而不是0.8,0.6?

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 有很多东西之前在学的时候没怎么注意,笔者也是在重温HashMap的 ...

  8. 127.0.0.1和0.0.0.0地址的区别

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 1. 问题引入 之前在使用tomcat的时候,启动tomcat默认 ...

  9. 一个有趣的实验:用0.1f 替换 0,性能提升 7 倍!

    点击关注上方"视学算法",设为"置顶或星标",第一时间送达技术干货. 本文来源:http://cenalulu.github.io/linux/about-de ...

最新文章

  1. python numpy矩阵运算加速器 NumExpr
  2. java nio 应用场景_BIO、NIO、AIO简述及应用场景
  3. 关于Unity实现AR功能(四)设置相机的对焦
  4. Hash冲突处理终极版
  5. Jquery和雅虎的YQL服务实现天气预报功能!
  6. 苹果多款产品加征关税至15% 目前售价暂无影响
  7. linux 可以ping 通 windows ,windows ping 不了 linux
  8. HttpServletResponse(打开图片)
  9. solidworks电气元件3d库_丨部件库丨西门子3RV6电机保护开关
  10. 电子技术应用课程设计
  11. NDK OpenGL ES 3.0 开发(五):FBO 离屏渲染
  12. 理财投资 之 基金投资 - #1篇:基金基础知识扫盲
  13. 制作仅在xy方向有周期性的夹层结构,且不使用约束平板
  14. ndnSIM学习(四)——examples之ndn-simple.cpp超详细剖析
  15. TIA博途中如何设计报警功能块FB,来简化编写离散量报警程序的时间?
  16. 首批最佳骑行路线揭晓
  17. 回顾2022年计算机视觉领域最激动人心的进展
  18. 云服务器上传文件怎么这么慢,百度云上传速度慢怎么办?教你如何加快百度云上传速度...
  19. py附带协议头post上传图片
  20. PHP 打印支票,用Access2007解决支票打印的日期大写问题

热门文章

  1. 【Code】Python金字塔模型的实现(Pyramid)
  2. 什么是BGP,一般机房的BGP是什么意思?
  3. 神经网络与深度学习笔记(二)正向传播与反向传播
  4. CS61A fa2021 Composing Programs 2.8 Efficiency 效率
  5. (PTA)6-7 使用函数计算两个复数之积 (10分)
  6. iOS MVC设计模式
  7. 计算机视觉博士去向,为什么现在不看好 CV 方向了呢?
  8. 通过网络安装CentOs7
  9. correl函数相关系数大小意义_Excel使用Correl函数返回相关系数并确定属性关系的步骤方法...
  10. 通过过滤器Filter来完成url访问权限限制