El filtro DirectShow CSource no lanzado hace que el programa se bloquee al cerrar el proceso

Estoy desarrollando un filtro de captura DirectShow CSource. Funciona bien, pero cuando cierro el programa que está usando el filtro (en este caso estoy probando con VLC, pero lo mismo ocurre con otros programas), el programa se bloquea (si lo estoy depurando en Visual Studio, entonces se dispara el punto de ruptura).

He estado buscando este problema desde hace algún tiempo y descubrí que tanto el filtro de origen como el flujo de origen no se han liberado; es decir, su contador de referencia es 1 al final del programa, la función DllCanUnloadNow () informa que todavía hay 2 objetos en uso y, cuando se invoca CoUninitialize (), el programa falla.

Estoy bastante seguro de que los contadores de referencia se manejan correctamente ya que estoy usando la implementación de clases base. Lo único inusual en mi software que se me ocurre es que estoy usando mi propia versión de DllGetClassObject (): configuré el archivo .DEF para que MyDllGetClassObject () se exportara en lugar de DllGetClassObject () para que pudiera insertar algún código antes invocando la implementación por defecto. No creo que esto sea un problema ya que he comprobado que el contador de referencia de todos los objetos que devuelvo al final de MyDllGetClassObject () es 1.

Supongo que me estoy perdiendo algo sobre el ciclo de vida del filtro, pero no puedo averiguar qué (este es el primer filtro de captura que estoy desarrollando). ¿Cualquier sugerencia?

Gracias de antemano,

Guillermo

Respuestas a la pregunta(1)

Su respuesta a la pregunta