Error reading ImageList1->Bitmap.

类库 2003-03-11 02:02:41
我写了个程序,运行就弹出个消息框说Error reading ImageList1->Bitmap.不能从stream中装入位图之类的话。我用的是WindowsXP、C++Builder6.0,这个问题以前一直没有发现,因为我在可执行文件的相同文件夹下放了个名为xxx.exe.manifest的文件,其中xxx.exe是我的可执行文件的名字,xxx.exe.manifest中的内容是
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1"
manifestVersion="1.0">
<assemblyIdentity
name="XXX for Windows2000/XP"
processorArchitecture="x86"
version="1.0.0.0"
type="win32"/>
<description>LLYF UPX</description>
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="x86"
publicKeyToken="6595b64144ccf1df"
language="*"
/>
</dependentAssembly>
</dependency>
</assembly>

就是用来让程序有XP风格的界面,后来偶然发现,只要没有这个文件,运行就会出现这个错误,哪怕只是把文件名改了。于是在Windows2000下运行它,也是这个错误,而且这下是有这个文件也不行了。于是把ImageList1删掉,又说ImageList2错误了,只好再把它也删了,总算可以运行了,不依赖这个文件了。可是一个程序不能用ImageList了,这是怎么回事呢?哪位高手指点一下吧!
...全文
1449 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
类库 2003-03-13
  • 打赏
  • 举报
回复
谢谢了,原来先要把那里的.res文件从project中删了:)
类库 2003-03-12
  • 打赏
  • 举报
回复
cker(〖烟波浩淼三千里、人鬼殊途五百年〗) :

RC文件是不是只要在Add to project...中添加就行了?不用其它的步骤?我试了好像不行。

还有,TImageList好像没有LoadFromResourceID这些方法?

最后,如果只是想在XP下运行的话,可以在自己的可执行文件的相同目录下放一个manifest的拷贝,也可以用ImageList了,只是不能在Windows2000下面运行了,98倒是还没试过,估计也不行的。
  • 打赏
  • 举报
回复
1> Test.rc :

MyBitmap BITMAP "CheckDark.bmp"

2> Add To Project Test.RC 。

3> CheckDark.bmp在同一路径下,包含了所有ImageList的图片。

4>
bool hr = ImageList1->ResourceLoad(rtBitmap,"MyBitmap",clFuchsia);
if(hr)ShowMessage(...);

此外 删除BCB.exe的manifest文件,这样就不会上述的问题了。

对于存在BCB.exe的manifest所建的工程,需要先CLear,重新添加ImageList中的图片.
  • 打赏
  • 举报
回复
就是这样的情况阿,加载了manifest之后,BCB的IDE在设计期间就会使用新版本的COMMControl,这样就会出现问题。还是删除了吧,原来的工程需要把ImageList清空后重新ADD图标就可以了.
关于LoadFromResourceID或者LoadFromResourceName请查阅帮助。

RC的制作,就是一个文本文件,定义了一些资源文件。
比如
1 APPICON ICON "test.ico"
。。。。
加入工程,一起编译.
类库 2003-03-11
  • 打赏
  • 举报
回复
我发现一个原因,因为我曾经把上面这个文件的一个拷贝改名成bcb.exe.manifest放到bcb.exe的所在目录,使bcb.exe也有XP风格界面,好像自从那时起,写的程序如果用到ImageList就有这个问题。而再把那个文件删除,原来的工程就不能链接成功了:(

cker(〖烟波浩淼三千里、人鬼殊途五百年〗) ,能否把你的“Imaglist->LoadFormResource。。。。”方法说详细一点,谢谢!
  • 打赏
  • 举报
回复
比较好的办法是把ImageList中的图表资源写成RC编译,在程序运行的时候,使用
Imaglist->LoadFormResource。。。。
  • 打赏
  • 举报
回复
不错,我早就发现这个问题了。。

主要还是因为使用了不同的CommControl版本,其中的Imagelist地实现上了出现了细微的区别,导致内存读写异常..

604

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder VCL组件使用和开发
社区管理员
  • VCL组件使用和开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧