加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

windows – 如何在控制台程序中为DirectSound SetCooperativeLev

发布时间:2020-12-14 01:52:21 所属栏目:Windows 来源:网络整理
导读:我正在编写一个控制台程序,它使用DirectSound API来渲染一些音频数据.在追踪 DirectSound Programming Guide (from Microsoft)时,我偶然发现了一个奇怪的问题.根据 documentation: After creating a device object,you must set the cooperative level for
我正在编写一个控制台程序,它使用DirectSound API来渲染一些音频数据.在追踪 DirectSound Programming Guide (from Microsoft)时,我偶然发现了一个奇怪的问题.根据 documentation:

After creating a device object,you must set the cooperative level for the device by using the 07002 method. Unless you do this,no sounds will be heard.

问题是我正在编写一个控制台程序,而SetCooperativeLevel需要一个HWND作为第一个参数.我没有在控制台程序中处理任何HWND.我尝试提供空指针,但它失败了DSERR_INVALIDPARAM错误代码.

应该在控制台程序中向IDirectSound8 :: SetCooperativeLevel提供什么HWND值?计划的音频部分计划构建为共享库,因此几乎不知道“外部”程序.

谢谢你的建议!

注意:我知道有一个更好的解决方案可以简单地渲染音频,比如使用SDL,OpenAL,SFML(基于OpenAL),但对于我当前的项目,DirectSound是强制执行的.

编辑:我从Microsoft工程师那里找到了一个message,它在创建GLOBAL_FOCUS缓冲区时消除了对使用桌面窗口或控制台窗口作为SetCooperativeLevel的HWND的疑虑.

解决方法

虽然我自己没有对此进行测试,但您可能会成功创建一个隐藏窗口并将其HWND传递给SetCooperativeLevel方法. SetCooperativeLevel使用此hwnd来确定应用程序何时具有输入焦点;因此,如果您选择输入焦点无关紧要的合作级别(例如,DSSCL_NORMAL),则隐藏窗口(永远不会接收输入焦点)应该没问题.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读