我有一个directShow过滤器:MyFilter.ax
当我尝试使用Regsvr32实用程序注册MyFilter.ax时,它会提供无错误或任何消息(成功或失败)。但过滤器未注册。
Regsvr32实用程序适用于我的其他过滤器。
为什么Regsvr32不会发出任何成功或失败消息?如何调试我的Regsvr32故障成功?用于注册directshow过滤器的任何替代实用程序可以提供有意义的消息吗?
祝福
更新
我在虚拟机上安装了干净的win7操作系统。然后再次尝试register.Fail而没有来自regsvr32的消息响应。
但然后再在虚拟机上安装干净的win7操作系统。 然后进行所有更新。在我进行更新后,regsvr32工作并安装我的过滤器....我不知道是什么原因导致regsvr32失败以及什么样的更新修复它。或者它真的是一个更新问题......
答案 0 :(得分:3)
可能发生的事情和展示上述行为的是,您的过滤器中的某个位置处于死循环或无限等待,因此DLL的DllRegisterServer永远不会返回。在这种情况下,您将能够看到每次尝试regsvr32时,任务管理器会显示另外一个regsvr32.exe运行进程,无论是否有CPU消耗。
如果这是您所拥有的,您将需要附加调试器并查看您在哪里确切地死循环...
答案 1 :(得分:1)
检查您是否使用 / s 选项调用regsvr32
答案 2 :(得分:1)
您can implement an application like regsvr32 yourself,您只需加载目标dll并调用函数DllRegisterServer。您可以在C#中实现它,例如使用以下p / invoke声明:
[DllImport("yourdll.ax")]
private static extern int DllRegisterServer();
您可以通过这种方式缩小问题范围。
更新
我会尝试安装Windows 7 Platform SDK并针对该版本编译DirectShow过滤器。我之前看到Windows 7中的旧版DirectX(甚至缺少dll)之前的兼容性问题,虽然我没有保留引用(如果有人阅读此引用请发布)。
答案 3 :(得分:1)
我也有这个问题,这就是我弄清楚错误的原因:
将您设置为启动项目
转到配置属性 - >调试:将命令设置为c:\windows\syswow64\regsvr32.exe
(如果您使用c:\windows\system32\regsvr32.exe
中的32位系统,则设置为32位版本)
将命令参数设置为dll的完整路径
在调试模式下运行,您应该看到dll正确注册的弹出窗口,然后执行将挂起
点击暂停执行
检查Threads调试窗口并检查当前活动的线程。检查他们的调用堆栈,因为大多数线程(在我的情况下)都挂在ntdll.dll