2011-05-22 40 views
2

我正嘗試使用Windows音頻會話API來查找當前音頻會話枚舉中的默認音頻會話。目前,我有角色中的音頻渲染端點的默認會話的IAudioSessionControl以及枚舉此默認端點的音頻會話的IAudioSessionEnumerator對象的引用,但我需要能夠比較IAudioSessionControl對象,即I與IAudioSessionEnumerator::GetSession返回的對象具有相同的IAudioSessionControl如何測試音頻會話的相等性

我希望我可以通過比較IAudioSessionControl平等指針來測試平等。當我使用IAudioClient::GetService多次獲得默認會話的IAudioSessionControl時,這將起作用。不幸的是,IAudioClient::GetService返回的這個指針沒有出現在IAudioSessionEnumerator的音頻會話枚舉中。此外,即使使用相同的音頻會話GUID(GUID_NULL)和CrossProcessSession值,通過IAudioSessionManager::GetAudioSessionControl路由多次獲取默認音頻會話也不會產生相同的IAudioSessionControl指針。

如何測試給定兩個IAudioSessionControl指針的音頻會話是否相等?是否有可能獲得給定IAudioSessionControl對象的音頻會話GUID和進程標識符?

回答

1

COM可以幫助你的唯一的東西是object identity requirement

您從兩個對象中查詢IUnknown*並進行比較。如果這些對象的IUnknown*是相同的,則它們是相同的對象,否則這些對象是不同的對象。

當然,實現可能會違反對象標識要求,或者那些不同的對象可能以某種方式映射到相同的內部對象上。 COM在這裏幫不了你 - 你必須找到特定於該組件實現的信息。