Re: [問題] 關於direct show的 GDI leak
可能是同事..
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
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):