Из «Как инициализировать XAudio2» в Windows Developer
Следующий пример кода:
#include <iostream>
#include <xaudio2.h>
HRESULT init_audio(void)
{
IXAudio2* pXAudio2 = NULL;
HRESULT hr;
if (FAILED(hr = XAudio2Create(&pXAudio2, 0, XAUDIO2_DEFAULT_PROCESSOR)))
return hr;
IXAudio2MasteringVoice* pMasterVoice = NULL;
if (FAILED(hr = pXAudio2->CreateMasteringVoice(&pMasterVoice)))
return hr;
return hr;
}
int main()
{
std::cout << "Hello World!\n";
std::cout << std::hex << init_audio() << std::endl;
}
непосредственно в новое консольное решение возвращается после сбоя CreateMasteringVoice с ошибкой 800401F0
.
Использование любого другого компилятора (GNU, LLVM, Clang) не позволяет успешно проанализировать XAudio2.h.
learn.microsoft.com/en-us/windows/win32/wmisdk/…
Если вы используете инструмент поиска ошибок, вы увидите, что 800401F0
переводится как CO_E_NOTINITIALIZED
.
Как отмечено в комментариях, вы должны сначала инициализировать COM:
HRESULT hr = CoInitializeEx( nullptr, COINIT_MULTITHREADED );
if (FAILED(hr))
// error
Я внес правку, чтобы отметить этот факт на странице Microsoft Docs.
Вам также следует взглянуть на Набор инструментов DirectX для аудио , чтобы найти обширный пример кода XAudio2. Также есть образцы для XAudio2 на GitHub.
clang/LLVM для Windows v10 работает для xaudio2.h
в самых последних пакетах SDK для Windows 10 и в заголовке пакета XAudio2Redist NuGet. Просто помните, что вам нужно вручную интегрировать XAudio2Redist NuGet include/lib, если вы не используете MSBuild. В противном случае, если вы используете заголовок xaudio2.h
в самом Windows 10 SDK, вам необходимо установить _WIN32_WINNT
для Windows 8 или более поздней версии.
Похоже, вы не инициализировали COM, используйте
CoInitializeEx
для инициализации COM перед вызовом API на основе COM.