This question already has an answer here:
IMFActivate::ActivateObject return error code “CoInitialize has not been called.”

(1个答案)


2年前关闭。




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

最佳答案

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

也就是说,线程需要在调用CoInitialize()或任何其他COM调用之前先调用CoInitializeEx()(或CoCreateInstance())。如果需要正常清理,则应该释放COM接口(interface)指针,完成COM Activity ,并在退出之前调用CoUninitialize()

关于c++ - MMDevice API中的CoCreateInstance返回错误代码0x800401F0 ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49481853/

10-11 18:16