今天解决了一个问题:GDI库版本不一致
2009-03-04 21:10
387 查看
问题描述:报表程序包括这样一个功能,在对话框上画设备的运行状态图,然后利用GDI库将对话框上的图谱保存到文件中,存为bitmap格式,调用了GetDIBits函数,报表程序在我的开发用机上运行正常,可是换到其它机器上时候,出现的内存访问非法的错误
解决过程:
1、加MsgBox确定出错的代码,确定在GetDIBits函数调用
2、查MSDN,GetDIBits函数在GDI32.dll中,该dll在system32下面,查两个机器上的版本,版本不一致。
3、从网上搜索GetDIBits函数,发现该函数调用之前,需要为图谱分配内存,而旧版本的GDI需要分配大于图谱长*宽的内存,而新版本的GDI只需要分配长*宽的内存就够了。
4、在第三步的基础上,增加内存分配,问题解决。
总结:经常遇到自己开发的软件在自己机器上调试运行没有问题,或者debug没有问题,但release版本有问题,很有可能的原因是MFC里面的dll版本不一致,不同的dll版本对需要分配的内存大小也不一致。仔细比对,多花时间和经历,也许问题就能解决。
解决过程:
1、加MsgBox确定出错的代码,确定在GetDIBits函数调用
2、查MSDN,GetDIBits函数在GDI32.dll中,该dll在system32下面,查两个机器上的版本,版本不一致。
3、从网上搜索GetDIBits函数,发现该函数调用之前,需要为图谱分配内存,而旧版本的GDI需要分配大于图谱长*宽的内存,而新版本的GDI只需要分配长*宽的内存就够了。
4、在第三步的基础上,增加内存分配,问题解决。
总结:经常遇到自己开发的软件在自己机器上调试运行没有问题,或者debug没有问题,但release版本有问题,很有可能的原因是MFC里面的dll版本不一致,不同的dll版本对需要分配的内存大小也不一致。仔细比对,多花时间和经历,也许问题就能解决。
相关文章推荐
- 今天做Delphi控件包安装的时候发现一个问题Never-build package 解决方法
- 今天解决一个异步刷新TreeView的问题
- 今天解决了的一个DEBUG运行正常RELEASE出错的问题!
- Java环境变量配置&解决版本不一致问题
- Android学习之解决7.0以上版本闪退的一个问题
- windows7下php5.4成功安装imageMagick,及解决php imagick常见错误问题。(phpinfo中显示不出来是因为:1.imagick软件本身、php本身、php扩展三方版本要一致,2.需要把CORE_RL_*.dll多个文件放到/php/目录下面)
- java与javac版本不一致问题,同时装两个jdk,完美解决iReport不兼容jdk8
- Java与Javac版本不一致问题解决方案
- Android一个版本问题的解决
- kafka版本不一致导致的一个小问题(二)
- 今天在国外论坛上为别人解决一个简单问题
- JDK 和JRE 解决版本不一致问题
- 如何解决代码版本不一致的问题
- 今天遇到一个网页抖动的问题,不知道怎么解决才好?
- 解决eclipse之ADT与SDK版本不一致问题
- Java环境变量配置&解决版本不一致问题
- 今天又解决了一个问题。
- android studio 导入项目Gradle版本不一致问题解决方法【android studio】
- 解决MySQL中文乱码以及版本不一致问题
- 今天帮同学解决了一个Acegi的问题