在标题中,我收到的错误代码不在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位计算机。不确定这是否可能是问题的一部分。 有什么建议吗?
答案 0 :(得分:3)
错误代码0x800401F0为CO_E_NOTINITIALIZED
(“尚未调用CoInitialize”)。这表明您没有先调用CoInitialize()
。
也就是说,线程需要在调用CoInitialize()
或任何其他COM调用之前调用CoInitializeEx()
(或CoCreateInstance()
)。如果你需要优雅的清理,你应该释放COM接口指针,完成你的COM活动,并在退出之前调用CoUninitialize()
。