2011-08-10 11 views
6

Tengo un filtro de DirectShow: MyFilter.axRegsvr32 extraño comportamiento => Regsvr32 no da ningún mensaje de éxito o fracaso

Cuando intento registrar MyFilter.ax con utilidad Regsvr32 da ningún error o cualquier mensaje (éxito o fracaso). Pero el filtro no está registrado.

La utilidad Regsvr32 funciona bien para mis otros filtros.

¿Por qué Regsvr32 deoes no da ningún mensaje de éxito o error? ¿Cómo puedo depurar mi falla de Regsvr32? ¿Alguna utilidad alternativa para registrar el filtro de los filtros directshow que puede dar un mensaje significativo?

mejores deseos

Actualización:

instalo OS win7 limpio en una máquina virtual. Luego intente registrarse. Vuelva a funcionar sin ninguna respuesta de mensaje de regsvr32.

Pero luego vuelva a instalar un sistema operativo win7 limpio en la máquina virtual. Luego haga todas las actualizaciones. Y después de hacer actualizaciones, regsvr32 funcionó e instaló mi filtro ... No sé por qué falla el regsvr32 y qué tipo de actualización lo soluciona. ¿O es realmente un problema de actualización ...

Respuesta

1

Compruebe que no se debe invocar con regsvr32 /s opción

+1

no ... no invoco regsvr32 con modo/s silencioso. solo use regsvr32 MyFilter.ax. – Novalis

1

Usted can implement an application like regsvr32 yourself, sólo tiene que cargar el archivo DLL de destino y llamar a la función DllRegisterServer. Se podría aplicar en C#, por ejemplo, utilizando la siguiente p/invocar declaración:

[DllImport("yourdll.ax")] 
private static extern int DllRegisterServer(); 

Usted puede ser capaz de reducir la emisión de esta manera.

Actualización:

Me gustaría tratar de instalar Windows 7 SDK de la plataforma y la compilación de su filtro DirectShow contra de eso. He visto problemas de compatibilidad con versiones anteriores de DirectX en Windows 7 (incluso dlls faltantes), aunque no guardé la referencia (si alguien que lee esto tiene una referencia, publíquela).

+0

Bueno, reduzco el problema. Depurar regsvr32 con Dependency Walker. Pero no proporciona un registro significativo ... Simplemente obtiene un error genérico de infracción de acceso ... Mi x dll activa de alguna manera entra en estado no válido en algunas máquinas. Pero no todas las máquinas. Lo pruebo en Windows 7. – Novalis

+1

¿Quizás esté tratando de registrar un dll de 32 bits en un sistema operativo de 64 bits? Si ese es el caso, entonces necesita usar c: \ windows \ syswow64 \ regsvr32.exe en lugar de c: \ windows \ system32 \ regsvr32.exe – yms

+0

O puede que le falte una biblioteca de dependencias, como vc-redist. ¿Creó este archivo .ax? – yms

3

Lo que puede ocurrir y exhibir el comportamiento mencionado es que en algún lugar de su filtro se encuentra en un bucle muerto o espera infinita, por lo que el DLL DllRegisterServer nunca regresa. En este caso, podrá ver que cada vez que prueba regsvr32 Task Manager le muestra un proceso más de ejecución de regsvr32.exe, con o sin consumo de CPU.

Si esto es lo que tiene, tendrá que adjuntar con depurador y ver exactamente donde usted tiene bucle muerto allí ...

+1

Lo resuelvo. Parece que activex no puede encontrar un 3er dll ... Pero en lugar de decir con gracia, regsvr32 ingresa un estado no válido ... Depurar no proporciona información valiosa – Novalis

1

tuve este problema también, y esto es lo que hice para averiguar qué estaba equivocado:

Establezca su dll como el proyecto de inicio.
vaya a Configuración de propiedades -> Depuración: Conjunto de comandos para c:\windows\syswow64\regsvr32.exe (o la versión de 32 bits, si estás en un sistema de 32 bits en c:\windows\system32\regsvr32.exe)
Establecer los argumentos de comandos para la ruta completa del archivo DLL
Ejecutar en depuración modo, debería ver la ventana emergente de que su dll está registrado correctamente, luego la ejecución se bloqueará.
Haga clic para pausar la ejecución
Compruebe en la ventana de depuración de subprocesos y compruebe qué subprocesos están actualmente activos. Compruebe sus pilas de llamadas ya que la mayoría de los hilos (en mi caso) están bloqueados en ntdll.dll

Cuestiones relacionadas