Compartir a través de


convenciones de Reference-Counting para objetos COM

Los métodos de las interfaces de audio siguen un conjunto general de reglas para contar referencias en los objetos COM que toman como parámetros de entrada o devuelven como parámetros de salida. Estas reglas y sus excepciones se resumen a continuación. Para obtener más información sobre las interfaces COM, consulte la sección COM de la documentación de Microsoft Windows SDK.

Recuento de referencias sobre parámetros de entrada

Al llamar a un método que toma una referencia a un objeto X como parámetro de entrada, el llamador debe contener su propia referencia en el objeto durante la llamada. Este comportamiento es necesario para asegurarse de que el puntero del método al objeto X permanece válido hasta que se devuelve. Si el objeto Y que implementa este método debe contener una referencia al objeto X más allá del retorno de este método, el método debe llamar a AddRef en el objeto X antes de devolverlo. Cuando el objeto Y finaliza más tarde con el objeto X, debe llamar a Release en el objeto X.

Por ejemplo, el método IServiceGroup::AddMember llama a AddRef en el objeto IServiceSink que agrega a su grupo de servicios. Para complementar este comportamiento, el método IServiceGroup::RemoveMember llama a Release en el objeto IServiceSink que quita del grupo de servicios.

Recuento de referencias en parámetros de salida

Un método que pasa una referencia de objeto al autor de la llamada a través de un parámetro de salida debe llamar a AddRef en el objeto antes de que devuelva (o antes de liberar su propia referencia al objeto). Este comportamiento es necesario para asegurarse de que el autor de la llamada contiene una referencia válida tras la devolución de la llamada. El autor de la llamada es responsable de llamar a Release en el objeto cuando haya terminado de usarlo.

Por ejemplo, el método IMiniportWaveCíclica::NewStream llama a AddRef en los objetos de canal stream, service group y DMA que genera al autor de la llamada (el controlador de puerto WaveCíclico). El autor de la llamada es responsable de liberar estas referencias cuando ya no las necesite. Para obtener una implementación del método IMiniportWaveCíclica::NewStream que muestra este comportamiento, vea el adaptador de ejemplo Sb16 en versiones anteriores del Kit de controladores de Microsoft Windows (WDK).

Excepciones a las reglas

Para obtener una descripción del recuento de referencias poco convencionales que este método realiza en su parámetro de salida DmaChannel , consulte IMiniportWavePci::NewStream.