MMDevice 中的 CoCreateInstance API returns 错误代码 0x800401F0
CoCreateInstance in the MMDevice API returns error code 0x800401F0
如标题所示,我收到 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 has not been called")。这表明您没有先调用 CoInitialize()
。
也就是说,线程需要在调用 CoCreateInstance()
或任何其他 COM 调用之前调用 CoInitialize()
(或 CoInitializeEx()
)。如果您需要优雅的清理,您应该释放 COM 接口指针,完成您的 COM activity,并在退出前调用 CoUninitialize()
。
如标题所示,我收到 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 has not been called")。这表明您没有先调用 CoInitialize()
。
也就是说,线程需要在调用 CoCreateInstance()
或任何其他 COM 调用之前调用 CoInitialize()
(或 CoInitializeEx()
)。如果您需要优雅的清理,您应该释放 COM 接口指针,完成您的 COM activity,并在退出前调用 CoUninitialize()
。