【问题标题】:visual c++ virtual camera application doesn't work on 64-bit windowsvisual c++ 虚拟相机应用程序不适用于 64 位 Windows
【发布时间】:2011-10-22 20:26:24
【问题描述】:

我正在尝试在 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 位窗口的)?

【问题讨论】:

    标签: visual-c++ directshow win64


    【解决方案1】:

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

    http://directshownet.sourceforge.net/

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • #2 上面:我在 Visual C++ 项目属性中设置预处理器定义,而不是在代码中。无论如何,这一点似乎不再相关 - 正如您所说,主要问题是如果我想让 Skype 接听它,我需要将虚拟相机注册为 32 位 dll。我尝试这样做,并确认我的相机出现在 Skype 中。感谢您的帮助!
      猜你喜欢
      • 2014-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-13
      • 2016-03-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多