Re: [問題] 關於direct show的 GDI leak

看板C_and_CPP作者 (OrangeRoad)時間14年前 (2010/01/28 21:51), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/2 (看更多)
可能是同事.. 1. 原則上debug最好先假設MS是正確的才比確可能找到root cause 2. GDI leak在C# library也有,需workaround. 解法是用Win32 API DeleteObject去free HANDLE 但重點是你要找出他程式忘了free的點 ex: hBitMap = Btn.GetHBitmap(); hBmp1 = xxxx (this call cause memory leak) ... DeleteObject(hBitMap); <- manualy free GDI, // this is to workaround fix C# library ※ 引述《worldxxi (風)》之銘言: : 遇到的問題: mfc/vs2008/win sdk6.1下寫direct show播放器,每次OnPaint : 完畢 gdi都會增加3,不是執行過程增加,是執行完畢增加 : 某瞬間--------->執行OnPaint--------->執行完畢------->發生某事情 : GDI=x GDI=x GDI=x GDI=x+3 : 希望得到的正確結果:不要GDI Leak : 程式跑出來的錯誤結果:每次執行完OnPaint或說有重繪訊息出現都會增加 : GDI : 開發平台: XP/SP3 mfc/vs2008/win sdk6.1 WindowsMediaPlayer11.0.57215268 : 有問題的code: 可看見的Code本身都不會導致gdi增加 : 補充說明:OnPaint完畢之後我一路單步執行到wincore.cpp,執行到vs2008說 : 沒有可執行的code,這時一按F5回到程式 gdi馬上增加3 : 有人有遇過這種情形的嗎?雖然我看微軟的sample code也會有這種情形 : VLC player也會,可是它自家的WMP11就很完美 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.96.88.211
文章代碼(AID): #1BOPPbAO (C_and_CPP)
文章代碼(AID): #1BOPPbAO (C_and_CPP)