0

我正在尝试在 Visual C++ 中为 64 位 Windows 实现一个虚拟相机应用程序。我从这里的代码开始:tmhare.mvps.org/downloads/vcam.zip,它使用 DirectShow 过滤器模拟视频捕获设备。它适用于 32 位窗口,但不适用于 64 位窗口。我将 Visual C++ 项目修改如下:

1)将平台改为x64并重新编译dll,链接在64位版本的strmbase.lib
2) 将预处理器定义从 WIN32,_WIN32 更改为 WIN64,_WIN64;
3) 重新编译库并使用 C:\Windows\system32\regsvr32.exe 注册 dll

dll 注册成功,regedit 显示我的虚拟相机的三个键

HKEY_CLASSES_ROOT\CLSID\{860BB310-5D01-11D0-BD3B-00A0C911CE86}\Instance\{8E14549A-DB61-4309-AFA1-3578E927E933},
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{860BB310-5D01-11D0-BD3B-00A0C911CE86}\Instance\{8E14549A-DB61-4309-AFA1-3578E927E933},
HKEY_CLASSES_ROOT\CLSID\{8E14549A-DB61-4309-AFA1-3578E927E933}\InprocServer32

但是,Skype 和 Windows Live Messenger 在 64 位 Windows 上都看不到摄像头。
我究竟做错了什么?我知道 Win64 有 HKEY_LOCAL_MACHINE\Software\Classes\CLSID{guid} 用于 64 位应用程序和 HKEY_LOCAL_MACHINE\Software\Wow6432Node 用于 32 位应用程序,但由于我将我的代码编译为 64 位应用程序,在我看来它的密钥被放置在注册表的正确部分。是否有适用于 64 位窗口的 DirectShow 虚拟相机滤镜实现我可以用作示例(我只找到了一个适用于 32 位窗口的)?

4

2 回答 2

1

大约一年前我尝试过 DirectShow,据我所知,64 位应用程序不支持它。所以我建议要么切换到 32 位模式,要么找到支持 64 位的库。这可能会对您有所帮助。

http://directshownet.sourceforge.net/

于 2011-10-22T20:30:13.317 回答
0

64 位过滤器的工作方式与它们的 32 位过滤器完全一样,不涉及特殊性。一个通用规则适用,值得一提:过滤器 DLL 位数应与应用程序位数相匹配,例如,无论操作系统位数如何,Skype 始终是 32 位,因此您需要 32 位虚拟摄像头。Skype 只是不关心 64 位过滤器,因为它从不使用它们。

另外,我不明白你上面的#2。您只需为另一个目标 (x64) 创建重复的现有配置,Visual Studio 将更新预定义的条件,例如 _WIN64,无需手动更改代码。

于 2011-10-22T21:06:18.467 回答