DirectShow CSource キャプチャ フィルターを開発しています。正常に動作しますが、フィルターを使用しているプログラムを閉じると (この場合は VLC でテストしていますが、他のプログラムでも同じことが起こります)、プログラムがクラッシュします (Visual Studio でデバッグしている場合は、ブレークポイントがトリガーされます)。
この問題をしばらく探していたところ、ソース フィルターとソース ストリームの両方が解放されていないことがわかりました。つまり、それらの参照カウンターはプログラムの最後で 1 であり、DllCanUnloadNow() 関数は 2 つのオブジェクトがまだ使用中であることを報告し、CoUninitialize() が呼び出されるとプログラムがクラッシュします。
基本クラスの実装を使用しているため、参照カウンターが正しく処理されていると確信しています。私のソフトウェアで考えられる唯一の異常な点は、私が独自のバージョンの DllGetClassObject() を使用していることです: DllGetClassObject() の代わりに MyDllGetClassObject() をエクスポートするように .DEF ファイルを構成しました。デフォルトの実装を呼び出します。MyDllGetClassObject() の最後に返されるすべてのオブジェクトの参照カウンターが 1 であることを確認したので、これは問題ではないと思います。
フィルターのライフサイクルについて何かが欠けていると思いますが、何がわかりません (これは私が開発している最初のキャプチャ フィルターです)。なにか提案を?
前もって感謝します、
ギレルモ