Convenções de Reference-Counting para objetos COM

Os métodos nas interfaces de áudio seguem um conjunto geral de regras para contar referências nos objetos COM que eles tomam como parâmetros de entrada ou retornam como parâmetros de saída. Essas regras e suas exceções são resumidas abaixo. Para obter mais informações sobre interfaces COM, consulte a seção COM da documentação do SDK do Microsoft Windows.

Contagem de referência em parâmetros de entrada

Ao chamar um método que usa uma referência a um objeto X como um parâmetro de entrada, o chamador deve manter sua própria referência no objeto durante a chamada. Esse comportamento é necessário para garantir que o ponteiro do método para o objeto X permaneça válido até que ele retorne. Se o objeto Y que implementa esse método precisar manter uma referência ao objeto X além do retorno desse método, o método deverá chamar AddRef no objeto X antes de retornar. Quando o objeto Y for concluído posteriormente usando o objeto X, ele deverá chamar Release no objeto X.

Por exemplo, o método IServiceGroup::AddMember chama AddRef no objeto IServiceSink que ele adiciona ao seu grupo de serviços. Para complementar esse comportamento, o método IServiceGroup::RemoveMember chama Release no objeto IServiceSink que ele remove do grupo de serviços.

Contagem de referência em parâmetros de saída

Um método que passa uma referência de objeto ao chamador por meio de um parâmetro de saída deve chamar AddRef no objeto antes de retornar (ou antes de lançar sua própria referência ao objeto). Esse comportamento é necessário para garantir que o chamador mantenha uma referência válida após o retorno da chamada. O chamador é responsável por chamar Release no objeto quando ele terminar de usá-lo.

Por exemplo, o método IMiniportWaveCyclic::NewStream chama AddRef nos objetos de canal stream, service group e DMA que ele gera para o chamador (o driver de porta WaveCyclic). O chamador é responsável por liberar essas referências quando não precisa mais delas. Para obter uma implementação do método IMiniportWaveCyclic::NewStream que mostra esse comportamento, consulte o adaptador de exemplo Sb16 em versões anteriores do WDK (Microsoft Windows Driver Kit).

Exceções às regras

Para obter uma descrição da contagem de referência não convencional que esse método executa em seu parâmetro de saída DmaChannel , consulte IMiniportWavePci::NewStream.