一个极罕见的问题,在win2k下一点问题没有, 在win98下非法操作, 弹出MessageBox "必要的资源无法得到"

code_cold 2002-08-19 02:58:19
一个极罕见的问题,在win2k下一点问题没有, 在win98下非法操作, 弹出MessageBox "必要的资源无法得到"

我把位图作为资源放在*.EXE文件中,并在不同的*.cpp文件中多次调用CBitmap::LoadBitmap(UINT ID), 是否这个原因呢 ??

我WIN98下无VC,无法调试,高手可告我是何原因,
分光了, 大家若近来就帮推一下.
...全文
47 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
Kiloy 2002-08-19
  • 打赏
  • 举报
回复
同意
gliderzhang 2002-08-19
  • 打赏
  • 举报
回复
我遇见过,很好解决。
这个问题一般是由于你构造了gdi对象,但是没有有效的销毁,导致再次申请
gdi资源的时候,系统就告诉你“必要的资源无法得到”。问题不是出在LoadBitmap,而是你的CBitmap对象没有被释放。
提醒一点,在gdi对象销毁以前必须从设备上下文中分离出来。就是说如果你的CBitmap被选进了设备上下文,则销毁以前必须选出。你可以在选进的时候把返回的旧的指针保存起来,要选出的时候,选中这个旧的指针就可以了。
看看内幕第四版67页,有比较详细的解释。
给个例子:(没有调试,只是告诉你大概意思)
{
......
CDC *pDC=GetDlgItem(IDC_BUTTON)->GetDC();
CDC cDC;
CBitmap *bitmapold,YouCBitmap;
YouCBitmap.LoadBitmap(...);
cDC.CreateCompatibleDC(pDC);
cDC.SelectObject(YouCBitmap);
......
cDC.SelectObject(bitmapold);//cDC在本函数退出的时候销毁,如果没有
//本语句,则YouCBitmap仍在设备上下文中,会销毁失败。
ReleaseDC(pDC);
......
}
In355Hz 2002-08-19
  • 打赏
  • 举报
回复
应该就是Win98回收GDI资源的Bug导致的,有时在OnPaint或OnTimer里作图,每次都重新创建所需的GDI对象,如果长时间运行程序,就会导致“必要的资源无法得到”的警告。

一般为了避免这种情况,需要多次使用的GDI对象都是一次性创建以后保存起来,尽量减少创建对象的次数。
同桌老王 2002-08-19
  • 打赏
  • 举报
回复
一般情况下,window api都告诉你这个函数得到的资源文件实例句柄都是临时的,要注意保存,并在取得句柄后要立即使用,不能存储,因为有可能变化什么的,msdn如是说
boris963 2002-08-19
  • 打赏
  • 举报
回复
这个问题我也遇到过,可能就是loadbitmap的问题,有哪位高人知道确切答案请告诉大家.
In355Hz 2002-08-19
  • 打赏
  • 举报
回复
注意释放Load的Bitmap,最好显式调用DeleteObject释放。
还有,Win98好像有一个问题,它不会及时收集使用过的GDI资源,如果你的程序里无数次创建和撤销大量GDI对象,即使没有泄漏,也很快会出现“必要的资源无法得到”的警告。
gameboy999 2002-08-19
  • 打赏
  • 举报
回复
估计是你的位图有点问题,
windows的loadxxx函数有些确实有点问题的,

我也碰到过这个问题,你可以试试把位图换上几幅,也许就不会有问题了
赵博强 2002-08-19
  • 打赏
  • 举报
回复
是不是跟字符串的类型有关。
FG_Hope 2002-08-19
  • 打赏
  • 举报
回复
估计是有资源泄露,你可以用Boundcheck查一下。
CppCore 2002-08-19
  • 打赏
  • 举报
回复
gz
code_cold 2002-08-19
  • 打赏
  • 举报
回复
谁的WIN98都出现了问题, 而WIN2K没有
ynli2002 2002-08-19
  • 打赏
  • 举报
回复
会不会是你的98有问题
nbgyf 2002-08-19
  • 打赏
  • 举报
回复
没遇到过



你在win98下编译一下,再运行

试试
code_cold 2002-08-19
  • 打赏
  • 举报
回复
UP
txdxun 2002-08-19
  • 打赏
  • 举报
回复
需要释放Bitmap的资源,要是说得不对大家见笑了
txdxun 2002-08-19
  • 打赏
  • 举报
回复
资源消耗
liaomu 2002-08-19
  • 打赏
  • 举报
回复
没遇到过。
code_cold 2002-08-19
  • 打赏
  • 举报
回复
2: lqbn(长天)

你是否 在不同的*.cpp文件中多次调用CBitmap::LoadBitmap(UINT ID) ??
你在win2k下有无问题 ??
lqbn 2002-08-19
  • 打赏
  • 举报
回复
极度关注中。

我也碰到的一样的问题。是在一个线程中为listctrl添加item时发生的。

2,586

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 资源
社区管理员
  • 资源
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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