CResourceException Warning: Uncaught exception in WindowProc (returning 0).
Warning: Uncaught exception in WindowProc (returning 0). ElectronicFence.exe 中的 0x762ec42d 處最可能的異常: Microsoft C++ 異常: 記憶體位置 0x0015f134 處的 CResourceException。 Warning: Uncaught exception in WindowProc (returning 0). ElectronicFence.exe 中的 0x762ec42d 處最可能的異常: Microsoft C++ 異常: 記憶體位置 0x0015f134 處的 CResourceException。 Warning: Uncaught exception in WindowProc (returning 0).
GDI洩漏會彈出CResourceException異常,一個過程的GDI上線是10000,若是跨越這個值法度就會down掉。若是在視訊處理懲罰函式存在gdi洩漏,會很輕易達到這個上限值。一個簡單的辦法可以斷定gdi是否存在洩漏,就是應用Windows工作管理員中程序(【檢視】-》【選擇列】選上【GDI物件】)看裡面的該過程的GDI物件是否一向在增長。
使用資源的物件和物件使用資源的方式。
1.使用資源的物件可分為兩類 區域性和全域性
2.使用資源的方式也分為兩類 拷貝和指標
結合你的程式碼,CreateCaret建立提示符 雖然沒有明確使用資源的是什麼物件 但是去MSDN上就可以知道了 實際上使用提示符的是CTextView這個視窗
,是一個全域性的物件。但是它使用資源的方式卻可以認為是指標式的 即它在使用bitmap作為提示符時 其實並沒有把bitmap拷貝一份 而是“寄希望於”它一直存在。這樣 當你的bitmap是區域性變數的時候 它就找不到這個資源了 也就沒法顯示提示符了。
但是當CDC* pDC; 使用CBrush,CPen,CFont時,pDC所指向的CDC是全域性的 但是它使用資源的方式可以認為是拷貝式的 也就是當我們建立一個CPen pen; 並執行pDC->SelectObject(&pen);後,實際上相當於將pen拷貝了一份給CDC。這樣 就算是pen是區域性變數 在以後的使用過程中也會保持pen所代表的畫筆。
既然如此 我想如果使用資源的物件是區域性的話,也很容易解釋了,就不多說了。
我對這個方面沒有更深的理解了,上面也只是我自己按照自己的想法說的,樓主要找更加確切的東西,再問問高人 或者到MSDN上去找幾個資源使用的例子 自己總結一下。
另外去參考一下:
上面這個文章當中提到了一個CGdiObject類的“虛擬解構函式”不知道是不是因為跟這個虛擬建構函式有關係(可能是基類沒有實現這個解構函式)
另外 GDI的很多麻煩在GDI+中有很多已經沒有了。GDI+中很多以前GDI中需要清理記憶體的地方都沒有了。 GDI+是GDI的升級 學習方向應該向GDI+偏移。