2011-10-22 79 views
0

我想在64位Windows的Visual c + +中实现虚拟相机应用程序。我从这里开始了代码:t​​mhare.mvps.org/downloads/vcam.zip,它使用DirectShow过滤器模拟视频捕获设备。它适用于32位窗口,但不适用于64位窗口。我修改了Visual C++项目如下:visual c + +虚拟相机应用程序不能在64位窗口上工作

 
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寄存器和注册表编辑器显示

 
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位窗口的实例)?

回答

1

我尝试了一年左右的DirectShow,并且从我记得的位置来看,在64位应用程序中不支持它。所以我建议要么切换到32位模式,要么找到一个支持64位的库。这可能会帮助你。

http://directshownet.sourceforge.net/

0

64位滤波器工作完全作为自己的32位同行,不涉及任何特异性。一个通用的规则是适用的,值得一提的是:过滤器DLL比特度应该与应用比特率相匹配,例如,由于无论操作系统位数如何,Skype始终为32位,因此您需要使用32位虚拟相机。 Skype并不关心64位过滤器,因为它从不使用它们。

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

+0

#2以上:我在Visual C++项目属性中设置预处理器定义,而不是在代码中。无论如何,这一点似乎并不重要 - 正如你所说的,主要问题是我需要将虚拟摄像机注册为32位的dll,如果我想让Skype提取它的话。我试着这样做,并确认我的相机在Skype中显示。谢谢你的帮助! – user1008890

相关问题