2011-06-19 52 views
3

我建立了一個自定義的DirectShow過濾器實現CSource如刪除DirectShow過濾器(析構函數不叫)

class Myfilter : public CSource 
{ 
    ~MyFilter(){ delete everything;} 
} 

當我使用GraphStudio此過濾器,我可以正常刪除它,析構函數正確調用。

當我通過COM instaciation創建我的過濾器,我不能再刪除它與刪除

IBaseFilter *pFilter = NULL; 

HRESULT hr = CoCreateInstance(clsid, NULL, CLSCTX_INPROC_SERVER, 
           IID_PPV_ARGS(&pFilter)); 

然後刪除pFilter不會調用析構函數。

我該如何爲我的過濾器調用我的自定義析構函數?

回答

4

你不應該爲delete COM對象,你應該Release()他們。 CSource可能實現IUnknown::Release()delete this,當引用計數降到0

+0

Samething with Release()而不是刪除 – Eric

+0

然後你在別的地方有個bug。請發佈一個重現問題的最簡單的例子。 –

+0

我仍然在某處引用了我的過濾器。大部分在GraphStudio未使用的圖形構建類中 – Eric

0

如果您已經將您的過濾器的圖形,不要忘記釋放自己的引用,然後從圖中刪除它,當你完成。