Успешная инициализация XAudio2 в решении Visual Studio Community 2019

From 'Как инициализировать XAudio2' в Windows Developer

  • Пакет SDK для Microsoft Windows 10
  • Сообщество Visual Studio 2019
  • Пакет NuGet Microsoft.XAudio2.Redist установлен
  • ЦП Intel(R) Pentium(R) 4415Y @ 1,60 ГГц x64
  • Windows 10 Pro для рабочих станций 64-разрядная операционная система

Следующий пример кода:

#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.


person Barrett    schedule 26.12.2020    source источник
comment
Похоже, вы не инициализировали COM, используйте CoInitializeEx для инициализации COM перед вызовом API на основе COM.   -  person Asesh    schedule 26.12.2020
comment
Возможный дубликат   -  person PaulMcKenzie    schedule 26.12.2020
comment
docs.microsoft.com/ en-us/windows/win32/wmisdk/   -  person FSDford    schedule 26.12.2020


Ответы (1)


Если вы воспользуетесь Инструментом поиска ошибок, вы увидите, что 800401F0 преобразуется в CO_E_NOTINITIALIZED.

Как отмечено в комментариях, сначала необходимо инициализировать COM:

HRESULT hr = CoInitializeEx( nullptr, COINIT_MULTITHREADED );
if (FAILED(hr))
   // error

Я внес правку, чтобы отметить этот факт в Документы Microsoft.

Вам также следует обратиться к набору инструментов 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 или более поздней версии.

person Chuck Walbourn    schedule 26.12.2020