【问题标题】:CoCreateInstance in the MMDevice API returns error code 0x800401F0 [duplicate]MMDevice API 中的 CoCreateInstance 返回错误代码 0x800401F0 [重复]
【发布时间】:2018-09-04 00:44:18
【问题描述】:

如标题所示,我收到的错误代码不在CoCreateInstance 的文档中。具体错误码为0x800401F0。

注意:我是 C++ 新手,一般来说都是这个级别的编程。尝试通过构建音频可视化工具来学习。

#include <stdio.h>
#include <Mmdeviceapi.h>

int CALLBACK WinMain(
  HINSTANCE hInstance,
  HINSTANCE hPrevInstance,
  LPSTR     lpCmdLine,
  int       nCmdShow
)
{
    const CLSID rclsid = __uuidof(MMDeviceEnumerator);
    const IID riid = __uuidof(IMMDeviceEnumerator);
    IMMDeviceEnumerator* pEnumerator;
    IMMDeviceCollection* pEndpoints;

    // Create a device enumerator
    HRESULT hr = CoCreateInstance(
        rclsid,
        NULL,
        CLSCTX_ALL,
        riid,
        reinterpret_cast<void **>(&pEnumerator)
    ); 
    if (FAILED(hr)) {
        printf("%x\n", hr);
    }
    // Create a collection of endpoints
    // pEnumerator->EnumAudioEndpoints(
    //  eCapture,
    //  DEVICE_STATE_ACTIVE,
    //  &pEndpoints
    // );

    // UINT deviceCount;
    // pEndpoints->GetCount(&deviceCount);
    // printf("%u\n", deviceCount);

    return 0;
}

编译 gcc audio.cpp -lole32

我正在运行一台 64 位机器。不确定这是否可能是问题的一部分。 有什么建议吗?

【问题讨论】:

    标签: c++ windows winapi audio com


    【解决方案1】:

    错误代码 0x800401F0 是 CO_E_NOTINITIALIZED(“尚未调用 CoInitialize”)。这表明您没有先致电CoInitialize()

    也就是说,线程需要在调用CoCreateInstance() 或任何其他COM 调用之前调用CoInitialize()(或CoInitializeEx())。如果你需要优雅的清理,你应该释放 COM 接口指针,完成你的 COM 活动,并在退出前调用CoUninitialize()

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-22
      • 2013-02-19
      • 1970-01-01
      • 2021-02-11
      • 1970-01-01
      • 1970-01-01
      • 2013-08-30
      • 2020-09-06
      相关资源
      最近更新 更多