ICreateDevEnum可以在32位上正常运行,但在64位上无法运行

戴夫

我有一个奇怪的问题,我已经确信这是我正在做的事情,或者很可能是没有做的事情,这很愚蠢。

我正在使用Win7 Ultimate和WinSDK(x64)7.1的x64计算机上使用'Studio 2010 Pro,以开发DirectShow应用程序(出于记录,我也尝试过WinSDK7.0和7.0A)。我关心的问题是创建一个枚举器来枚举捕获设备,特别是使用CLSID_VideoInputDeviceCategory。我搜索过很多,只有当人们在开发自己的过滤器并且过滤器未正确注册时,才发现类似的问题。

但是,我无法终生弄清是什么原因造成的。

以下最基本的示例代码可以通过32位x86构建成功完成,但是更改为针对x64构建,则在

hr = CoCreateInstance(CLSID_VideoInputDeviceCategory,nullptr,CLSCTX_INPROC_SERVER,IID_PPV_ARGS(&pCreateDevEnum));

错误为“ 0x80040154类未注册”。

任何帮助或指针将不胜感激。

非常感谢

适用于x86而不适用于x64的源代码的一部分...

#include <Windows.h>
#include <dshow.h>

INT WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrev,LPSTR lpCmdLine,INT iCmdShow){
    ICreateDevEnum* pCreateDevEnum = nullptr;
    IEnumMoniker* pEnumMoniker = nullptr;
    HRESULT hr = S_OK;

    CoInitializeEx(nullptr,COINIT_MULTITHREADED);

    hr = CoCreateInstance(CLSID_VideoInputDeviceCategory,nullptr,CLSCTX_INPROC_SERVER,IID_PPV_ARGS(&pCreateDevEnum));

    if(FAILED(hr)){
    [...more code is omitted as its not needed to show it]
罗曼·R。

类别不是COM创建的。这些是GUID,用于标识/列出某些类的类别,并CoCreateInstance与CLSID(COM类的标识符)一起使用。

正确的用法是通过系统设备枚举器也可以看看:

// Create the System Device Enumerator.
ICreateDevEnum *pDevEnum;
HRESULT hr = CoCreateInstance(CLSID_SystemDeviceEnum, NULL,  
    CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&pDevEnum));

if (SUCCEEDED(hr))
{
    // Create an enumerator for the category.
    hr = pDevEnum->CreateClassEnumerator(CLSID_VideoInputDeviceCategory, 
        ppEnum, 0);

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

ICreateDevEnum可以在32位上正常运行,但在64位上无法运行

来自分类Dev

无法在64位VM上运行32位程序

来自分类Dev

无法在64位VM上运行32位程序

来自分类Dev

这段代码在armv7(32位)上可以完美运行,但在arm64(64位)上不能完美运行

来自分类Dev

为什么此代码无法在32位iOS上运行,而在64位上运行呢?

来自分类Dev

在64位OS上编写程序时,程序是否可以在32位OS上运行?

来自分类Dev

此代码在armv7(32位)上完美运行,但在arm64(64位)上不完美

来自分类Dev

无法在Mac 32位上运行Eclipse

来自分类Dev

在64位gentoo linux上运行32位程序

来自分类Dev

在32位而不是64位上运行超线程?

来自分类Dev

在32位而不是64位上运行超线程?

来自分类Dev

在32位系统上运行64位程序

来自分类Dev

在64位Ubuntu 15.10上运行32位程序

来自分类Dev

如何发出可以在32位,64位窗口以及Mac(VBA Excel)上运行的http请求?

来自分类Dev

您可以在运行32位操作系统的64位CPU上使用多少内存?

来自分类Dev

32位应用程序可以在64位iPhone 5S上运行吗?

来自分类Dev

从Kali 64位iso安装的Kali可以在32位平台上运行吗?

来自分类Dev

32位DirectShow筛选器可以在64位Windows上运行吗?

来自分类Dev

无法在64位Ubuntu上运行32位动态可执行文件

来自分类Dev

EXE不是有效的Win32应用程序,但在64位上运行

来自分类Dev

我可以在Windows 7 32位操作系统上运行的VirtualBox上安装Windows 7 64位吗?

来自分类Dev

无法在32位操作系统上运行在NetBeans(在64位Windows 10上)中创建的.exe

来自分类Dev

应用在32位设备上无法正常运行-NSInteger与intValue

来自分类Dev

在Windows 64上以32位模式运行Java

来自分类Dev

我可以在Ubuntu touch上运行32/64位mathematica吗?

来自分类Dev

OSX如何在32位内核上运行时如何运行64位Binaries?

来自分类Dev

可以使用NVIDIA驱动程序在32位Linux Mint上运行64位内核吗?

来自分类Dev

Pyodbc库是否可以在64位Windows上运行?

来自分类Dev

Steam无法在32位Ubuntu 13.04上运行

Related 相关文章

  1. 1

    ICreateDevEnum可以在32位上正常运行,但在64位上无法运行

  2. 2

    无法在64位VM上运行32位程序

  3. 3

    无法在64位VM上运行32位程序

  4. 4

    这段代码在armv7(32位)上可以完美运行,但在arm64(64位)上不能完美运行

  5. 5

    为什么此代码无法在32位iOS上运行,而在64位上运行呢?

  6. 6

    在64位OS上编写程序时,程序是否可以在32位OS上运行?

  7. 7

    此代码在armv7(32位)上完美运行,但在arm64(64位)上不完美

  8. 8

    无法在Mac 32位上运行Eclipse

  9. 9

    在64位gentoo linux上运行32位程序

  10. 10

    在32位而不是64位上运行超线程?

  11. 11

    在32位而不是64位上运行超线程?

  12. 12

    在32位系统上运行64位程序

  13. 13

    在64位Ubuntu 15.10上运行32位程序

  14. 14

    如何发出可以在32位,64位窗口以及Mac(VBA Excel)上运行的http请求?

  15. 15

    您可以在运行32位操作系统的64位CPU上使用多少内存?

  16. 16

    32位应用程序可以在64位iPhone 5S上运行吗?

  17. 17

    从Kali 64位iso安装的Kali可以在32位平台上运行吗?

  18. 18

    32位DirectShow筛选器可以在64位Windows上运行吗?

  19. 19

    无法在64位Ubuntu上运行32位动态可执行文件

  20. 20

    EXE不是有效的Win32应用程序,但在64位上运行

  21. 21

    我可以在Windows 7 32位操作系统上运行的VirtualBox上安装Windows 7 64位吗?

  22. 22

    无法在32位操作系统上运行在NetBeans(在64位Windows 10上)中创建的.exe

  23. 23

    应用在32位设备上无法正常运行-NSInteger与intValue

  24. 24

    在Windows 64上以32位模式运行Java

  25. 25

    我可以在Ubuntu touch上运行32/64位mathematica吗?

  26. 26

    OSX如何在32位内核上运行时如何运行64位Binaries?

  27. 27

    可以使用NVIDIA驱动程序在32位Linux Mint上运行64位内核吗?

  28. 28

    Pyodbc库是否可以在64位Windows上运行?

  29. 29

    Steam无法在32位Ubuntu 13.04上运行

热门标签

归档