SDL报错 XAudio2: XAudio2Create() failed at open.

本文介绍了在Windows环境下,如果SDL_OpenAudioDevice()调用失败并提示XAudio2:XAudio2Create()failedatopen.,原因通常是未正确初始化COM。文章指导了如何在使用前在相应线程中初始化Com,以及注意事项,如多线程环境下的COM线程模型管理。
摘要由CSDN通过智能技术生成

通常在Windows下,使用SDL打开音频设备【SDL_OpenAudioDevice()】失败,通过SDL_GetError()函数得知失败原因是“XAudio2: XAudio2Create() failed at open.”。

出现这种错误普遍都是没有初始Com,Com是Windows音频架构,在Windows系统中,音频设备和音频处理往往依赖于COM架构。

所以我们需要在调用SDL_OpenAudioDevice()之前并且在该线程中去初始化Com,调用CoInitializeEx(NULL,COINITBASE_MULTITHREADED); 需包含<windows.h>,并且程序要链接到Ole32.lib,这个lib库Windows都有,可以使用everything搜索一下本地库,这个库也分64/32位,不要被名字迷惑,链接匹配你应用程序位数的库就好。

注意:如果你在多个线程中都使用SDL_OpenAudioDevice(),那么您需要在每个线程中分别初始化COM。这是因为COM的初始化是基于线程的,不同的线程需要不同的COM线程模型,并且每个线程退出的时候都要清理自己的com,也就是调用CoUninitialize();

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值