7

我有一个 directShow 过滤器:MyFilter.ax

当我尝试使用 Regsvr32 实用程序注册 MyFilter.ax 时,它不会给出错误或任何消息(成功或失败)。但过滤器未注册。

Regsvr32 实用程序适用于我的其他过滤器。

为什么 Regsvr32 deoes 没有给出任何成功或失败消息?如何调试我的 Regsvr32 失败-成功?注册directshow过滤器的任何替代实用程序可能会提供有意义的消息?

最好的祝愿

更新:

我在虚拟机上安装干净的 win7 操作系统。然后尝试注册。在没有来自 regsvr32 的消息响应的情况下再次失败。

但是然后在虚拟机上再次安装一个干净的win7操作系统。然后进行所有更新。在我进行更新 regsvr32 工作并安装我的过滤器之后....我不知道是什么原因导致 regsvr32 失败以及什么样的更新可以修复它。还是真的是更新问题...

4

4 回答 4

3

可能发生并表现出上述行为的是,在过滤器的某个地方,您处于死循环或无限等待中,因此 DLL 的 DllRegisterServer 永远不会返回。在这种情况下,您将能够看到每次尝试 regsvr32 任务管理器都会向您显示一个 regsvr32.exe 正在运行的进程,无论有无 CPU 消耗。

如果这是您所拥有的,您将需要附加调试器并查看您在那里究竟有死循环......

于 2011-09-07T18:06:10.490 回答
2

检查您是否没有使用/s选项调用 regsvr32

于 2011-08-11T07:11:25.450 回答
1

我也遇到了这个问题,这就是我为找出问题所做的工作:

将您的 dll 设置为启动项目。
转到配置属性-> 调试:将命令设置为c:\windows\syswow64\regsvr32.exe(或 32 位版本,如果您在 32 位系统上c:\windows\system32\regsvr32.exe
将命令参数设置为您的 dll 的完整路径
在调试模式下运行,您应该看到弹出窗口您的 dll 已正确注册,然后执行将挂起。
单击以暂停执行
检查线程调试窗口并检查当前处于活动状态的线程。检查他们的调用堆栈,因为大多数线程(在我的情况下)都挂在 ntdll.dll

于 2012-12-07T19:15:20.750 回答
1

可以自己实现一个像regsvr32这样的应用程序,你只需要加载你的目标dll并调用函数DllRegisterServer。您可以在 C# 中实现它,例如使用以下 p/invoke 声明:

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

您可以通过这种方式缩小问题范围。

更新:

我会尝试安装 Windows 7 Platform SDK 并针对它编译 DirectShow 过滤器。我之前在 Windows 7 中看到过与旧版本 DirectX 的兼容性问题(甚至缺少 dll),尽管我没有保留参考资料(如果阅读本文的人有参考资料,请发布)。

于 2011-08-11T17:28:41.460 回答