You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++Builder中TBitmap::LoadFromResourceName加载失败求助

解决C++Builder中LoadFromResourceName加载位图失败的问题

问题根源

你当前的.rc文件是用数字ID定义位图资源的(如2 BITMAP "cp2.bmp"),这类资源属于整数标识符资源,只能通过LoadFromResourceID加载。而LoadFromResourceName需要的是字符串名称标识符,你传入的"cp2.bmp"并不是资源的字符串名称,而是位图文件的路径,因此会抛出资源未找到的异常。

解决方案

要使用LoadFromResourceName加载,需修改.rc文件为资源指定字符串名称,有两种实现方式:

方式1:直接用字符串作为资源名称

修改.rc文件,将数字ID替换为自定义的字符串名称(可与文件名一致):

cp0 BITMAP "cp0.bmp"
cp1 BITMAP "cp1.bmp"
cp2 BITMAP "cp2.bmp"
cp3 BITMAP "cp3.bmp"
cp4 BITMAP "cp4.bmp"
cp5 BITMAP "cp5.bmp"
cp6 BITMAP "cp6.bmp"
cp7 BITMAP "cp7.bmp"
cp8 BITMAP "cp8.bmp"
cp9 BITMAP "cp9.bmp"

对应的加载代码(使用RC中定义的字符串名称,无需带.bmp后缀):

TBitmap *MyBitMap = new Graphics::TBitmap();
const UnicodeString MyName = "cp2";
MyBitMap->LoadFromResourceName((int)HInstance, MyName);
delete MyBitMap;
MyBitMap = NULL;

方式2:同时保留数字ID和字符串名称

若需要同时支持ID和名称加载,可在.rc文件中为数字ID绑定字符串别名:

2 BITMAP "cp2.bmp"
"cp2" EQU 2

这种情况下,既可以用LoadFromResourceID((int)HInstance, 2)通过ID加载,也可以用LoadFromResourceName((int)HInstance, L"cp2")通过名称加载。

注意事项

  • .rc文件中的字符串名称区分大小写,加载时必须完全匹配。
  • 修改.rc文件后,需重新编译项目(通过C++Builder的「Project -> Build」重新生成.res文件)。

内容的提问来源于stack exchange,提问作者WorldTalk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 10:42:55