Я хочу использовать DSound Audio Render в одном из моих приложений, поэтому я загружаю его с CoCreateInstance .Согласно моему предыдущему вопросу , CoCreateInstance
может вернуть REGDB_E_CLASSNOTREG
, если у меня не установлено звуковое оборудование.Но если я позвоню CoCreateInstance
во второй раз, у меня не будет такой же HRESULT
.Вот небольшой пример (чтобы воспроизвести его, вы должны отключить все ваши аудиоустройства в диспетчере устройств Windows):
#include <iostream>
#include <strmif.h>
#include <uuids.h>
int main()
{
std::cout << "Start" << std::endl;
HRESULT hr = CoInitialize(NULL);
printf("CoInitialize = 0x%x\n", hr);
IBaseFilter* ptr = NULL;
hr = CoCreateInstance(CLSID_DSoundRender, NULL, CLSCTX_INPROC, IID_IBaseFilter, (void**)&ptr);
printf("CoCreateInstance = 0x%x\n", hr);
if(ptr)
ptr->Release();
hr = CoCreateInstance(CLSID_DSoundRender, NULL, CLSCTX_INPROC, IID_IBaseFilter, (void**)&ptr);
printf("CoCreateInstance = 0x%x\n", hr);
if(ptr)
ptr->Release();
CoUninitialize();
std::cout << "End" << std::endl;
std::cin.get();
}
Я получаю такой результат:
Start
CoInitialize = 0x0
CoCreateInstance = 0x80040154
CoCreateInstance = 0x80040256
End
Первый код ошибки 0x80040154
соответствует REGDB_E_CLASSNOTREG
, поэтому он соответствует ответу , который я получил в моем предыдущем вопросе, но второй код ошибки 0x80040256
соответствует VFW_E_NO_AUDIO_HARDWARE
.Согласно MSDN :
VFW_E_NO_AUDIO_HARDWARE
0x80040256
Невозможно воспроизвести аудиопоток: нет звукового оборудования илиаппаратное обеспечение не поддерживается.
Так почему у меня появляется значимая ошибка только во второй раз, когда я звоню CoCreateInstance
?Что я могу изменить, чтобы иметь эту ошибку при первом вызове?