我正在尝试在64位Windows的Visual C ++中实现虚拟相机应用程序。我从这里开始使用代码:tmhare.mvps.org/downloads/vcam.zip,它使用DirectShow过滤器模拟视频捕获设备。它在32位窗口上工作正常,但在64位窗口上不起作用。我按如下方式修改了Visual C ++项目:
1) changed the platform to x64 and recompiled the dll, linking in the 64-bit version of strmbase.lib 2) changed preprocessor definitions to WIN64,_WIN64 from WIN32,_WIN32; 3) Recompiled the library and registered the dll using C:\Windows\system32\regsvr32.exe
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位窗口上看到相机 我究竟做错了什么?我知道Win64对于64位应用程序有HKEY_LOCAL_MACHINE \ Software \ Classes \ CLSID {guid},对于32位应用程序有HKEY_LOCAL_MACHINE \ Software \ Wow6432Node,但是因为我将我的代码编译为64位应用程序,所以在我看来它的密钥被放置在注册表的右侧。是否有我可以用作样本的64位窗口的DirectShow虚拟摄像机过滤器实现(我只找到一个用于32位窗口)?
答案 0 :(得分:1)
我在一年左右的时间里尝试过DirectShow,而且从我记忆中来看,在64位应用程序中不支持它。所以我建议切换到32位模式,或者找一个支持64位的库。这可能会对你有帮助。
答案 1 :(得分:0)
64位过滤器的工作方式与32位过滤器完全相同,不涉及特殊性。一般规则适用,值得一提:过滤器DLL比特率应与应用程序比特率相匹配,例如:因为无论OS的位数如何,Skype总是32位,你需要32位虚拟摄像头。 Skype不关心64位过滤器,因为它从不使用它们。
另外,我不明白你的#2。您只需要为另一个目标(x64)创建重复的现有配置,Visual Studio将更新预定义的条件,如_WIN64,代码中不需要手动更改。