程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> 【MyBean調試筆記】接口的使用和清理,mybean調試筆記接口

【MyBean調試筆記】接口的使用和清理,mybean調試筆記接口

編輯:Delphi

【MyBean調試筆記】接口的使用和清理,mybean調試筆記接口


【DEMO信息】

   有問題的DEMO, 由芒果提交

【問題描述】

雙擊Tab頁面關閉頁面和插件的時候出現AV異常

   procedure TfrmMain.pgcMainMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var Index: Integer; lvPluginForm: IPluginForm; lvTabShtEx:TTabShtEx; begin // 左鍵點擊並且雙擊 if (Button = mbLeft) and (ssDouble in Shift) then begin Index := pgcMain.IndexOfTabAt(X, Y); if Index >= 0 then begin lvTabShtEx := TTabShtEx(pgcMain.Pages[Index]); lvPluginForm := lvTabShtEx.PluginForm; if Application.MessageBox('確認要關閉畫面嗎?', '詢問', MB_OKCANCEL + MB_ICONQUESTION) = IDCANCEL then Exit; lvPluginForm.freeObject; pgcMain.Pages[Index].Free; end; end; end;

 

這段代碼中有一個lvPluginForm為接口IPluginForm變量, 過程在退出時會執行lvPluginForm := nil和其他一些資源的清理工作,清理的時候會觸發對象的__release方法,但是我們看到這個對象已經釋放掉了,然後在進行清理的時候出現了上面看到的訪問違規的錯誤。

【問題解決】

找到出現問題的根本,解決起來就很快了,盡量不要等到過程清理時在去清理你的資源,特別是可能訪問不存在的資源。在end;之前 加一句lvPluginForm := nil;這樣就好了

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved