Partilhar via


Reference-Counting Convenções 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 o método retorne. Se o objeto Y que implementa esse método precisa manter uma referência ao objeto X além do retorno desse método, o método deve chamar AddRef no objeto X antes de retornar. Quando o objeto Y terminar de usar o objeto X, deverá chamar Release no objeto X.

Por exemplo, o método IServiceGroup::AddMember chama AddRef no objeto IServiceSink que adiciona ao seu grupo de serviços. Para complementar este 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 para o chamador através de um parâmetro de saída deve chamar AddRef no objeto antes que ele retorne (ou antes de liberar sua própria referência ao objeto). Esse comportamento é necessário para garantir que o chamador mantenha uma referência válida no 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 no fluxo, grupo de serviços e objetos de canal DMA que ele envia para o chamador (o driver de porta WaveCyclic). O chamador é responsável por liberar essas referências quando não precisa mais delas. Para uma implementação do método IMiniportWaveCyclic::NewStream que mostra esse comportamento, consulte o adaptador de exemplo Sb16 nas versões anteriores do Kit de Desenvolvimento de Drivers do Microsoft Windows (WDK).

Exceções às regras

Para obter uma descrição da contagem de referência não convencional realizada por este método no seu parâmetro de saída DmaChannel, consulte IMiniportWavePci::NewStream.