我正在尝试使用Windows Audio Session API在当前音频会话的枚举中找到默认音频会话。目前,我引用了IAudioSessionControl
角色中音频渲染端点的默认会话的eConsole
以及枚举此默认端点的音频会话的IAudioSessionEnumerator
对象,但是我需要能够将IAudioSessionControl
对象与IAudioSessionEnumerator::GetSession
返回的IAudioSessionControl
对象进行比较。
我希望通过比较IAudioSessionControl
相等的指针来测试相等性。当我使用IAudioClient::GetService
多次获得默认会话的IAudioSessionControl
时,此方法有效。不幸的是,IAudioClient::GetService
返回的此指针不会出现在IAudioSessionEnumerator
的音频会话枚举中。此外,即使使用相同的音频会话GUID(IAudioSessionControl
)和GUID_NULL
值,通过IAudioSessionManager::GetAudioSessionControl
路由多次获取默认音频会话也不会产生相同的CrossProcessSession
指针。
如何在给出两个IAudioSessionControl
指针的情况下测试音频会话的相等性?是否可以获取给定IAudioSessionControl
对象的音频会话GUID和进程标识符?
答案 0 :(得分:2)
查看IAudioSessionControl2::GetSessionIdentifier API,这是音频子系统用于持久保存会话卷的内容。如果要在运行时区分会话(同时运行同一应用程序的两个实例),请检查GetSessionInstanceIdentifier API。
答案 1 :(得分:1)
COM唯一能帮到你的是object identity requirement。
您从两个对象中查询IUnknown*
并进行比较。如果这些对象的IUnknown*
是相同的,则它是同一个对象,否则它们是不同的对象。
当然,实现可能违反对象标识要求,或者那些不同的对象可能以某种方式映射到同一内部对象。 COM无法帮助您 - 您必须找到特定于该组件实现的信息。