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