Удаление фильтров DirectShow (деструктор не вызывается) - PullRequest
3 голосов
/ 19 июня 2011

Я создал собственный фильтр DirectShow, который реализует CSource, например

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

Когда я использую этот фильтр в GraphStudio, я могу его правильно удалить, деструктор вызывается правильно.

Когда я создаю свой фильтр с помощью COM instaciation, я больше не могу удалить его с помощью delete

IBaseFilter *pFilter = NULL;

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

затем удаление pFilter не вызовет деструктор.

Как я могу вызвать свой собственный деструктор для моего фильтра?

Ответы [ 2 ]

4 голосов
/ 19 июня 2011

Вы не должны delete COM-объекты, вы должны Release() их. CSource вероятно реализует IUnknown::Release() как delete this, когда счетчик ссылок падает до 0.

0 голосов
/ 01 июля 2011

Если вы добавили свой фильтр в график, не забудьте удалить его из графика, когда закончите, прежде чем выпускать свои собственные ссылки.

...