我正在编写一个使用 DirectSound API 呈现一些音频数据的控制台程序。在遵循DirectSound Programming Guide (from Microsoft)时,我偶然发现了一个奇怪的问题。根据文档:
创建设备对象后,您必须使用IDirectSound8::SetCooperativeLevel方法设置设备的协作级别。除非您这样做,否则不会听到任何声音。
问题是我正在编写一个控制台程序,并且SetCooperativeLevel
需要一个 HWND 作为第一个参数。我在控制台程序中没有任何 HWND 需要处理。我尝试提供一个空指针,但失败并出现DSERR_INVALIDPARAM
错误代码。
IDirectSound8::SetCooperativeLevel
在控制台程序中应该提供什么 HWND 值?该程序的音频部分计划构建为一个共享库,因此它对“外部”程序几乎一无所知。
感谢您的任何建议!
注意:我知道简单渲染音频有更好的解决方案,例如使用 SDL、OpenAL、SFML(基于 OpenAL),但对于我当前的项目,DirectSound 是强制执行的。
编辑:我发现了一条来自 Microsoft 工程师的消息SetCooperativeLevel
,它消除了在创建 GLOBAL_FOCUS 缓冲区时使用桌面窗口或控制台窗口作为 HWND 的疑虑。