COM 物件的Reference-Counting慣例
音訊介面中的方法會遵循一組一般規則,以計算它們接受的 COM 物件參考做為輸入參數或傳回做為輸出參數。 這些規則及其例外狀況如下摘要說明。 如需 COM 介面的詳細資訊,請參閱Microsoft Windows SDK檔的 COM 一節。
輸入參數的參考計數
呼叫採用物件 X 參考做為輸入參數的方法時,呼叫端必須在呼叫期間保留物件上自己的參考。 這個行為是必要的,以確保方法的物件 X 指標會維持有效狀態,直到傳回為止。 如果實作這個方法的物件Y必須保留物件X的參考超出這個方法傳回的範圍,此方法應該先在物件X上呼叫AddRef,然後再傳回。 當物件Y稍後使用物件X完成時,它應該在物件X上呼叫Release。
例如,IServiceGroup::AddMember方法會在它新增至其服務群組的IServiceSink物件上呼叫AddRef。 為了補充此行為, IServiceGroup::RemoveMember 方法會在它從服務群組移除的 IServiceSink 物件上呼叫 Release 。
輸出參數上的參考計數
透過輸出參數將物件參考傳遞至呼叫端的方法,應該先在 物件上呼叫 AddRef ,再傳回 (或釋放物件本身對物件的參考之前) 。 需要此行為,以確保呼叫端在從呼叫傳回時保留有效的參考。 呼叫端負責在物件上使用時呼叫 Release 。
例如, IMiniportWaveCyclic::NewStream 方法會在資料流程、服務群組和 DMA 通道物件上呼叫 AddRef ,而該物件會輸出給呼叫端, (WaveCyclic 埠驅動程式) 。 呼叫端負責在不再需要這些參考時釋出這些參考。 如需顯示此行為的 IMiniportWaveCyclic::NewStream 方法實作,請參閱舊版 Microsoft Windows Driver Kit (WDK) 的 Sb16 範例配接器。
規則的例外狀況
如需此方法在其 DmaChannel 輸出參數上執行之非常數參考計數的描述,請參閱 IMiniportWavePci::NewStream。