diff --git a/src/sound/xaudio2_s.cpp b/src/sound/xaudio2_s.cpp --- a/src/sound/xaudio2_s.cpp +++ b/src/sound/xaudio2_s.cpp @@ -117,6 +117,20 @@ static IXAudio2MasteringVoice* _masterin static ComPtr _xaudio2; static StreamingVoiceContext* _voice_context = nullptr; +/** Create XAudio2 context with SEH exception checking. */ +static HRESULT CreateXAudio(API_XAudio2Create xAudio2Create) +{ + HRESULT hr; + __try { + UINT32 flags = 0; + hr = xAudio2Create(_xaudio2.GetAddressOf(), flags, XAUDIO2_DEFAULT_PROCESSOR); + } __except (EXCEPTION_EXECUTE_HANDLER) { + hr = GetExceptionCode(); + } + + return hr; +} + /** * Initialises the XAudio2 driver. * @@ -156,8 +170,7 @@ const char *SoundDriver_XAudio2::Start(c } // Create the XAudio engine - UINT32 flags = 0; - hr = xAudio2Create(_xaudio2.GetAddressOf(), flags, XAUDIO2_DEFAULT_PROCESSOR); + hr = CreateXAudio(xAudio2Create); if (FAILED(hr)) {