COM オブジェクト用の参照カウントの規則

オーディオ インターフェイスの方式は、入力パラメータとして受け取るか、出力パラメータとして返す COM オブジェクトの参照をカウントするための一般的なルール セットに従います。 これらの規則とその例外を以下にまとめます。 COM インターフェイスの詳細については、Microsoft Windows SDK ドキュメントの COM セクションを参照してください。

入力パラメータの参照カウント

オブジェクトX への参照を入力パラメータとして受け取るメソッドを呼び出す場合、呼び出し元は呼び出しの間、オブジェクトに対する独自の参照を保持する必要があります。 この動作は、オブジェクト X への方式のポインターが戻るまで有効なままであることを保証するために必要です。 この方式を実装するオブジェクト Y が、このメソッドから戻った後もオブジェクト X への参照を保持する必要がある場合、メソッドは戻る前にオブジェクト X に対して AddRef を呼び出す必要があります。 オブジェクト Y が後でオブジェクト X の使用を終了すると、オブジェクト X に対して リリース を呼び出す必要があります。

たとえば、IServiceGroup::AddMember 方式は、サービス グループに追加する IServiceSink オブジェクトに対して AddRef を呼び出します。 この動作を補完するために、IServiceGroup::RemoveMember 方式は、サービス グループから削除する IServiceSink オブジェクトに対して リリース を呼び出します。

出力パラメータの参照カウント

出力パラメータを通じて呼び出し元にオブジェクト参照を渡す方式は、オブジェクトが戻る前 (またはオブジェクトへの独自の参照を解放する前) に、オブジェクトの AddRef を呼び出す必要があります。 この動作は、呼び出し元が呼び出しから戻ったときに有効な参照を確実に保持するために必要です。 呼び出し側は、オブジェクトの使用が終了したときに、そのオブジェクトに対して リリース を呼び出す必要があります。

たとえば、IMiniportWaveCyclic::NewStream 方式は、呼び出し元 (WaveCyclic ポート ドライバー) に出力するストリーム、サービス グループ、および DMA チャネル オブジェクトに対して AddRef を呼び出します。 呼び出し元は、これらの参照が必要なくなったときに、これらの参照を解放する責任があります。 この動作を示す IMiniportWaveCyclic::NewStream 方式の実装については、以前のバージョンの Microsoft Windows Driver Kit (WDK) の Sb16 サンプル アダプターを参照してください。

ルールの例外

このメソッドが DmaChannel 出力パラメーターに対して実行する型破りな参照カウントの説明については、IMiniportWavePci::NewStreamを参照してください。