2010-10-30 47 views
8

我是這個名爲界面和DirectX的新東西。 我從某個遊戲中吸取DirectX接口,並使用DirectX繪製我自己的東西,如紋理和字體。 我的問題是:當程序調用設備的Hooked Reset Function時,我需要清除內存中的所有事物,Com接口。如果我不清楚,在重置事件被調用後,遊戲只是嘗試創建一個新的表面調用d3dDierctx9Create但它的失敗,只是出現錯誤,並關閉遊戲。如何釋放接口?

我認爲我只需要清除所有事件之前的重置事件,其解釋在Msdn上。

回答

19

你不釋放一個接口。它由引用計數並由編譯器管理。讓它超出範圍,給變量指定一個不同的接口,或者給它分配,編譯器會自動生成一個對其_Release方法的調用,以便當它的引用計數下降到0時自動清理它。

+0

因此,對於directx資源,如果它們支持它,通常要麼在它們上調用'onResetDevice',要麼重新創建它們並將它們重新分配給Delphi變量。這將自動釋放原始資源,就像梅森說的那樣......您必須非常小心,不要將資源保留在另一個變量中,因爲這會阻止資源被釋放(即referenceCount> 0)。通常使用某種管理資源的包裝器對象使得這一點更容易一些。 – 2010-10-31 08:44:24