Dot-Net

在 Delphi 中銷毀 COM 對象

  • June 25, 2011

有一些.net 程序集,通過COM 在delphi 中呼叫它。

var
  intf: ITest;

...
  intf:= CreateComObject(CLASS_TEST) as ITest;
  ...
  //here comes some stuff
  ...

我必須做些什麼來破壞它以釋放記憶體。或不?

你應該更好地釋放記憶體

      intf := nil;

當你不再需要它時。如果定義為,則最好使用try...finally intf := nil;塊,或者在Destroy覆蓋的方法中,即作為類屬性。intf``fIntf

如果intf在堆棧上定義,我們將在方法結束時自動釋放。try...finally intf := nil; end編譯器生成了一個隱藏塊來釋放intf實例。

COM 對像是引用計數的,當引用計數為零時,它們會自動銷毀。每當您的程式碼添加對對象的引用或刪除它時,編譯器都會自動添加對對象的呼叫_AddRef和介面方法。_Release將引用 COM 對象的變數設置為nil將呼叫_Release(減少引用計數),並且如果引用計數達到零,則該對像也被釋放(如果引用計數不為零,則不會釋放)。當變數超出範圍時(即局部變數,當過程退出時),_Release如果變數引用 COM 對象(或任何引用計數的 Delphi 介面),編譯器也會呼叫。

引用自:https://stackoverflow.com/questions/6475882