MMDevice API中的CoCreateInstance返回错误代码0x800401F0

时间:2018-03-25 22:57:35

标签: c++ windows winapi audio com

在标题中,我收到的错误代码不在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位计算机。不确定这是否可能是问题的一部分。 有什么建议吗?

1 个答案:

答案 0 :(得分:3)

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

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