首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

今日终于体验到了C++Builder的稳定性

2012-08-22 
今天终于体验到了C++Builder的稳定性用了一段时间CB2010,感觉还是挺稳定的,还到处去说CB如何稳定,结果今天

今天终于体验到了C++Builder的稳定性
用了一段时间CB2010,感觉还是挺稳定的,还到处去说CB如何稳定,结果今天就遇到了事:
生成单一的文件包,把Dynamic RTL设成false,把Build With Runtime Packages选掉,以前这么做从没出过问题,今天白天还去教别人,结果到了晚上,就出了问题:如果不生成这种单一的可执行文件,编译、连接、运行都没问题,一旦要生成单一文件,就出来一大堆连接错误:
[ILINK32 Warning] Warning: BSS : 0x00000000 / 0x00800000
[ILINK32 Warning] Warning: CODE : 0x000472ef / 0x00800000
[ILINK32 Warning] Warning: DATA : 0x00031790 / 0x00800000
[ILINK32 Warning] Warning: DEBNAM : 0x0012761c / 0x00800000
[ILINK32 Warning] Warning: DEBSYM : 0x00040d68 / 0x00800000
[ILINK32 Warning] Warning: DEBTYP : 0x00210e04 / 0x00800000
[ILINK32 Warning] Warning: Extdef flags : 0x00000413 / 0x00004000
[ILINK32 Warning] Warning: Extdefs : 0x0000104c / 0x00004000
[ILINK32 Warning] Warning: External types : 0x000008f0 / 0x00040000
[ILINK32 Warning] Warning: Import symbols : 0x0000030c / 0x00100000
[ILINK32 Warning] Warning: Line number cache : 0x00014172 / 0x00060000
[ILINK32 Warning] Warning: OBJ symbols : 0x000a0cc8 / 0x00100000
[ILINK32 Warning] Warning: Public GSX : 0x0000c5e4 / 0x000c0000
[ILINK32 Warning] Warning: Public types : 0x00014d48 / 0x00080000
[ILINK32 Warning] Warning: Publics : 0x0006f504 / 0x000c0000
[ILINK32 Warning] Warning: SegRelocs : 0x0005986c / 0x00800000
[ILINK32 Warning] Warning: StringBlock : 0x000005be / 0x00800000
[ILINK32 Warning] Warning: TLS : 0x0000009c / 0x00800000
[ILINK32 Warning] Warning: Type names : 0x00034fda / 0x00100000
[ILINK32 Warning] Warning: UNKNOWN : 0x00000018 / 0x00800000
[ILINK32 Warning] Warning: Virdefs : 0x0000c5e4 / 0x00020000
[ILINK32 Warning] Warning: D:/source/Test.ilc: 0x003a0000 / 0x08000000
[ILINK32 Warning] Warning: D:/source/Test.ild: 0x000c0000 / 0x08000000
[ILINK32 Warning] Warning: D:/source/Test.ilf: 0x005f0000 / 0x08000000
[ILINK32 Warning] Warning: D:/source/Test.ils: 0x00990000 / 0x03000000
[ILINK32 Warning] Warning: D:/source/Test.tds: 0x010e0000 / 0x08000000
[ILINK32 Warning] Warning: unknown heap name : 0x08000000 / 0x08000000
[ILINK32 Warning] Warning: Error detected (PE972)
[ILINK32 Warning] Warning: Unable to perform incremental link - performing full link...
[ILINK32 Warning] Warning: BSS : 0x00000000 / 0x00800000
[ILINK32 Warning] Warning: CODE : 0x000472ef / 0x00800000
[ILINK32 Warning] Warning: D:/source/Test.ilc: 0x003a0000 / 0x08000000
[ILINK32 Warning] Warning: D:/source/Test.ild: 0x000c0000 / 0x08000000
[ILINK32 Warning] Warning: D:/source/Test.ilf: 0x005f0000 / 0x08000000
[ILINK32 Warning] Warning: D:/source/Test.ils: 0x00990000 / 0x03000000
[ILINK32 Warning] Warning: D:/source/Test.tds: 0x010e0000 / 0x08000000
[ILINK32 Warning] Warning: DATA : 0x00031790 / 0x00800000
[ILINK32 Warning] Warning: DEBNAM : 0x0012761c / 0x00800000
[ILINK32 Warning] Warning: DEBSYM : 0x00040d68 / 0x00800000
[ILINK32 Warning] Warning: DEBTYP : 0x00210e04 / 0x00800000
[ILINK32 Warning] Warning: Extdef flags : 0x00000413 / 0x00004000
[ILINK32 Warning] Warning: Extdefs : 0x0000104c / 0x00004000
[ILINK32 Warning] Warning: External types : 0x000008f0 / 0x00040000
[ILINK32 Warning] Warning: Import symbols : 0x0000030c / 0x00100000
[ILINK32 Warning] Warning: Line number cache : 0x00014172 / 0x00060000
[ILINK32 Warning] Warning: OBJ symbols : 0x000a0cc8 / 0x00100000
[ILINK32 Warning] Warning: Public GSX : 0x0000c5e4 / 0x000c0000
[ILINK32 Warning] Warning: Public types : 0x00014d48 / 0x00080000
[ILINK32 Warning] Warning: Publics : 0x0006f504 / 0x000c0000
[ILINK32 Warning] Warning: SegRelocs : 0x0005986c / 0x00800000
[ILINK32 Warning] Warning: StringBlock : 0x000005be / 0x00800000


[ILINK32 Warning] Warning: TLS : 0x0000009c / 0x00800000
[ILINK32 Warning] Warning: Type names : 0x00034fda / 0x00100000
[ILINK32 Warning] Warning: UNKNOWN : 0x00000018 / 0x00800000
[ILINK32 Warning] Warning: Virdefs : 0x0000c5e4 / 0x00020000
[ILINK32 Warning] Warning: unknown heap name : 0x08000000 / 0x08000000
[ILINK32 Warning] Warning: D:/source/Test.ilc: 0x003a0000 / 0x08000000
[ILINK32 Warning] Warning: D:/source/Test.ild: 0x000c0000 / 0x08000000
[ILINK32 Warning] Warning: D:/source/Test.ilf: 0x005f0000 / 0x08000000
[ILINK32 Warning] Warning: D:/source/Test.ils: 0x00990000 / 0x03000000
[ILINK32 Warning] Warning: D:/source/Test.tds: 0x010e0000 / 0x08000000
[ILINK32 Warning] Warning: unknown heap name : 0x08000000 / 0x08000000
[ILINK32 Warning] Warning: Error detected (PE972)
[ILINK32 Error] Error: Unable to perform link
Failed

怎么回事?

[解决办法]
builde all projects
[解决办法]
2010没在正式项目中用,路径的问题吧
[解决办法]
这也算作是工程配置改变,所以最好是 Clean 一下工程,重新编译链接。
[解决办法]

pe972这个地方有详细讨论,的确是Shell函数调用引起的,难道这是个Bug?

https://forums.embarcadero.com/message.jspa?messageID=218301
[解决办法]
不过奇怪的是我自己做的一个TShellControl组件,好多Shell函数都用到了,在2010下用的好好的,没有什么问题,很奇怪,呵呵。
[解决办法]

探讨

最终的解决方案是当以后用到Shell32的函数时,就用VC封装一下再使用,……

[解决办法]
CB自带的shell32.lib不是bcb推荐使用的,谨慎点的话可以自己调用api来实现。
[解决办法]
有没有试过自己用implib从shell32.dll中导出一个shell32.lib,替换掉原来的文件?
[解决办法]
刚才重现了楼主的问题,和我以前编的一个Shell组件对比,无意中发现了一个解决方法,在你的程序中生成一个TOpenDialog的实例,连接就完全成功了。以前纯属侥幸,使用了TOpenDialog。

呵呵,很奇怪,看TOpenDialog的构造函数好像也没做什么呀。

热点排行