发信人: wenbobo(伪高手)
整理人: wenbobo(2002-12-24 09:24:54), 站内信件
|
用bcb6的人估计很多了吧,不知道大家有没有发现程序的兼容性问题。
如果你不是在XP下编译,就万幸,否则注意了:
凡是用了bitmap list之类存储图片的窗口,编译后本机可以正常运行,但是如果是在9x或者nt,2000什么的下面执行,当这个窗口初始化的时候,就会出现连续3个非法操作,然后程序终止,呵呵,是不是很爽?没有发代码给客户的,赶快抢救。
本人仔细分析了在2000和xp下编译的文件的区别(呵呵从早到现在晚上两点半),终于找到答案。在有存储图片的窗口的情形,xp下编译出的文件一般要比2000下的小一些。用工具检查后发现,二者的代码段是完全一样的,减小的只有资源段。用reshacker再比较,发现只是bitmap= {xxxx区域减小了。
再结合bitmap文件结构,发现,在xp下的bitmap是用RTL压缩过的,但是2000下的却没有压缩。这样,我就猜测,xp可以直接处理这种压缩bmp,2000不能。于是写了vc程序,用LoadBitmap来验证。果然,程序在xp下可以正确装载图片,在2000和98se下不能。
呵呵,为什么我猜测到是LoadBitmap的不同呢?因为,bcb6里面有着太多的老掉牙的delphi代码了(mfc也一样:),大量的使用着这个LoadBitmap;而SDK里说:This function has been superseded by the LoadImage function. 不测它测谁?
这样的话,我们在xp下写程序就要注意了:千万不要轻易使用已经宣布被superseded了的函数,不然,哼!在你的新系统上能跑,换个地方就死得很惨了!要命的是,这类函数多得很,而且,就算你不用,不表示你用到的lib,dll什么的也没有去用……防不胜防。
对于这个问题,我也没有很好的解决办法。我写了一个程序,扫描我所编译过的所有程序(遍历它所用的模块),在exports section里面查找敏感函数,结果找到了好几个可能有问题的。但是这样也不能保证没有遗漏,因为LoadLibrary……
用正版的同志,请向Inprise报告吧,随便用个图片都会出问题,这太严重了,不知道Inprise是怎么测试的
----
太阳当头照,花儿对我笑,小鸟说早早早,你为什么背个炸药包?
我去炸学校,谁也不知道,一拉线儿,我就跑,轰隆一声学校不见了。
|
|