2

我正在尝试使用 Windows 音频会话 API 在当前音频会话的枚举中定位默认音频会话。目前,我IAudioSessionControl在角色中引用了音频渲染端点的默认会话eConsole以及IAudioSessionEnumerator枚举此默认端点的音频会话的对象,但我需要能够比较IAudioSessionControl我拥有的对象是否相等返回的IAudioSessionControl对象IAudioSessionEnumerator::GetSession

我希望我可以通过比较IAudioSessionControl指针是否相等来测试是否相等。当我IAudioSessionControl使用IAudioClient::GetService. 不幸的是,返回的这个指针IAudioClient::GetService没有出现在IAudioSessionEnumerator. 此外,即使使用相同的音频会话 GUID ( ) 和值,通过路由多次获取默认音频会话IAudioSessionManager::GetAudioSessionControl也不会产生相同的指针。IAudioSessionControlGUID_NULLCrossProcessSession

如何在给定两个IAudioSessionControl指针的情况下测试音频会话的相等性?是否可以获得给定IAudioSessionControl对象的音频会话 GUID 和进程标识符?

4

2 回答 2

2

查看IAudioSessionControl2::GetSessionIdentifier API,这是音频子系统用来保持会话卷的。如果您想在运行时区分会话(同一应用程序的两个实例同时运行),请检查GetSessionInstanceIdentifier API。

于 2011-05-23T13:56:34.937 回答
1

COM 在这里唯一可以帮助您的是对象身份要求

IUnknown*从两个对象中查询并比较它们。如果IUnknown*这些对象中的相同,则它是相同的对象,否则它们是不同的对象。

当然,实现可能会违反对象身份要求,或者那些不同的对象可能会以某种方式映射到同一个内部对象。COM 在这里帮不了你——你必须找到特定于该组件实现的信息。

于 2011-05-23T05:40:14.703 回答