J'ai un filtre DirectShow: myfilter.ax p>
Lorsque j'essaie d'enregistrer myFilter.ax avec l'utilitaire REGSVR32, il donne aucune erreur ni message fort> (succès ou échec). Mais le filtre n'est pas enregistré. P>
utilitaire REGSVR32 fonctionne bien pour mes autres filtres. P>
meilleurs voeux p>
I Installez Clean Win7 OS sur une machine virtuelle. Ensuite, essayez de vous inscrire.fail à nouveau sans aucun message-réponse de REGSVR32. P>
mais strong> puis installez à nouveau un système d'exploitation Win7 propre sur la machine virtuelle. puis faire toutes les mises à jour forte>. Et après que je faisais des mises à jour, regsvr32 a travaillé et installer mon filtre ... Je ne sais pas quelle cause REGSVR32 échoue et quel type de mise à jour le corrige. Ou est-ce vraiment un problème de mise à jour ... p>
4 Réponses :
Vérifiez que vous n'invoyez pas REGSVR32 avec
Non ... je n'invoque pas regsvr32 avec mode silencieux / s. Il suffit d'utiliser regsvr32 myfilter.ax.
vous peut mettre en œuvre Une application comme REGSVR32 vous-même , il vous suffit de charger votre DLL cible et d'appeler la fonction dllregistersterver . Vous pouvez l'implémenter en C # par exemple en utilisant la déclaration P / invoke suivante: Vous pourriez être capable de réduire le problème de cette façon. P> mise à jour: P> J'essaierais d'installer Windows 7 Plate-forme SDK et de compiler votre filtre DirectShow contre cela. J'ai déjà vu des problèmes de compatibilité avec des versions plus anciennes de DirectX dans Windows 7 (même des DLL manquantes), bien que je n'ai pas conservé la référence (si une personne qui lise cela a une référence, veuillez le poster). P> P>
Eh bien, je limite la question. Débogez REGSVR32 avec Walker de dépendance. Mais ne donne pas de journal moyen ... il suffit d'obtenir une erreur de violation d'ACESS générique ... Mon DLL actif DLL saisit en quelque sorte un état invalide sur certaines machines. Mais pas toutes les machines. Je le teste sur Windows 7.
Peut-être que vous essayez d'enregistrer une DLL 32 bits dans un système d'exploitation 64 bits? Si tel est le cas, vous devez utiliser c: \ windows \ sswow64 \ regsvr32.exe au lieu de c: \ windows \ system32 \ regsvr32.exe
Ou vous pouvez manquer une bibliothèque de dépendance, comme VC-Redist. Avez-vous créé ce fichier .ax?
Je crée ce fichier de filtrage. Il semble y avoir une bibliothèque sans manquer.Si donc regsvr32 va le dire. Et non, je l'utilise sur 32 bits OS. Mais j'ai trouvé autre chose étrange. J'ai configuré un système d'exploitation Win7 propre sur la machine virtuelle. Ensuite, essayez de vous inscrire. Il échoue également sans aucun mésage de REGSVR32. Mais lorsque je réinstalle à nouveau OS, effectuez toutes les mises à jour, alors cela a fonctionné ... Quels types de mises à jour pour la mauvaise utilisation (si oui) provoque REGSVR32 et mon filtre échouent?
Qu'est-ce qui peut avoir lieu et présenter le comportement mentionné est que quelque part dans votre filtre vous êtes dans une boucle morte ou une attente infinie, de sorte que DLL est DLLregisterServer ne revient jamais. Dans ce cas, vous serez en mesure de voir que chaque fois que vous essayez que REGSVR32 Task Manager vous indique un processus de fonctionnement de REGSVR32.exe, avec ou sans consommation de la CPU. p>
Si c'est ce que vous avez, vous voudrez vous attacher avec le débogueur et voir où vous avez exactement une boucle morte là-bas ... P>
Je le résolve. Il semble que ActiveX ne puisse pas ne pas pouvoir trouver une 3ème dll ... mais au lieu de dire gracieusement, REGSVR32 Entrer dans l'état non valide. Débogou ne donne pas de valeur précieuse
J'ai aussi eu ce problème et voici ce que j'ai fait pour comprendre ce qui n'allait pas: p>
Définissez votre DLL comme projet de démarrage.
Aller à la configuration Propriétés -> Débogage: définissez la commande sur C: \ windows \ sswow64 \ regsvr32.exe code> (ou la version 32 bits si vous êtes sur un système de 32 bits dans C: \ Windows \ System32 \ regsvr32.exe code>)
Définissez les arguments de commande sur le chemin complet de votre DLL de
Exécuter en mode de débogage, vous devez voir la fenêtre contextuelle que votre DLL est correctement enregistrée, puis l'exécution sera suspendue.
Cliquez pour mettre en pause l'exécution
Vérifiez la fenêtre de débogage des threads et vérifiez quels threads sont actuellement actifs. Vérifiez leurs piles d'appels depuis la plupart des threads (dans mon cas) sont suspendus dans ntdll.dll p>