2011-06-19 21 views
3

私はGraphStudioにこのフィルタを使用する場合、私はそれを正しく削除することができ、そのような削除DirectShowフィルタ(デストラクタが呼び出されていない)

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

としてCSourceを実装するカスタムのDirectShowフィルタを構築している、デストラクタが正しく呼び出されます。私はCOMのinstaciation経由で私のフィルタを作成すると

することは、私はもはやpFilterがデストラクタを呼び出すことはありません削除削除

IBaseFilter *pFilter = NULL; 

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

でそれを削除することはできません。

フィルタ用にカスタムデストラクタを呼び出すにはどうすればよいですか?

答えて

4

あなたはdelete COMオブジェクトには属していません。あなたはRelease()です。 CSourceはおそらくdelete thisとしてIUnknown::Release()を実装していますが、グラフにあなたのフィルタを追加した場合、参照カウントが0

+0

削除の代わりにリリース()を使用しているサギント – Eric

+0

他の場所にバグがあります。問題を再現する最小限の例を投稿してください。 –

+0

私はまだどこかで私のフィルタへの参照を持っていました。 GraphStudioで使われていなかった私のグラフ構築クラス – Eric

0

に低下したときに、あなたがあなた自身の参照を解放する前に完了したら、グラフからそれを削除することを忘れないでください。

関連する問題