首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GDI泄漏问题

GDI泄漏问题
EN

Stack Overflow用户
提问于 2009-01-27 01:47:23
回答 7查看 2.3K关注 0票数 3

我注意到在使用任务管理器时,下面的代码中有一个GDI漏洞。执行此代码的进程中的GDI对象计数每次执行时都会增加1,但是我似乎找不到问题所在。

任何帮助都将不胜感激。

代码语言:javascript
复制
// create new DC based on current    
HDC hDC = CreateCompatibleDC(GetDC());
// select a bitmap into the new DC and keep the old one
HGDIOBJ hOldObj = SelectObject (hDC,hBM);
// do somthing here --> 100% no leak here
SomeFunction (hDC);
// select the old object back from whence it came and delete whats returned   
DeleteObject (SelectObject (hDC,hOldObj));
// delete the DC
DeleteDC(hDC);
// delete the tmp object
DeleteObject (hOldObj);

RM

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2009-01-27 02:39:19

抄袭评论,我没有把它作为答案,因为我不能测试它,我不确定它是否正确,请测试它。

一般来说,嵌套的调用并不是一个好主意

代码语言:javascript
复制
HDC hDC1 = GetDC(); 
HDC hDC2 = CreateCompatibleDC(hDC1); 
.. 

而不是

代码语言:javascript
复制
HDC hDC = CreateCompatibleDC(GetDC()); 

(顺便说一句,在您的代码中,由GetDC返回的HDC并未发布。)

票数 6
EN

Stack Overflow用户

发布于 2009-01-27 02:22:21

确保在从GetDC返回的句柄上调用ReleaseDC而不是DeleteDC

票数 4
EN

Stack Overflow用户

发布于 2011-11-18 00:58:50

我可以建议deleaker找到并修复泄漏。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/482083

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档