Condividi tramite


Convenzioni di Reference-Counting per gli oggetti COM

I metodi nelle interfacce audio seguono un set generale di regole per il conteggio dei riferimenti sugli oggetti COM che accettano come parametri di input o restituiscono come parametri di output. Queste regole e le relative eccezioni sono riepilogate di seguito. Per altre informazioni sulle interfacce COM, vedere la sezione COM della documentazione di Microsoft Windows SDK.

Conteggio dei riferimenti sui parametri di input

Quando si chiama un metodo che accetta un riferimento a un oggetto X come parametro di input, il chiamante deve contenere il proprio riferimento sull'oggetto per la durata della chiamata. Questo comportamento è necessario per garantire che il puntatore del metodo all'oggetto X rimanga valido fino a quando non viene restituito. Se l'oggetto Y che implementa questo metodo deve contenere un riferimento all'oggetto X oltre il valore restituito da questo metodo, il metodo deve chiamare AddRef sull'oggetto X prima di restituire . Al termine dell'utilizzo dell'oggetto X, l'oggetto Y deve chiamare Release per l'oggetto X.

Ad esempio, il metodo IServiceGroup::AddMember chiama AddRef nell'oggetto IServiceSink aggiunto al relativo gruppo di servizi. Per integrare questo comportamento, il metodo IServiceGroup::RemoveMember chiama Release sull'oggetto IServiceSink che rimuove dal gruppo di servizi.

Conteggio dei riferimenti sui parametri di output

Un metodo che passa un riferimento a un oggetto al chiamante tramite un parametro di output deve chiamare AddRef sull'oggetto prima che restituisca (o prima di rilasciare il proprio riferimento all'oggetto). Questo comportamento è necessario per garantire che il chiamante contenga un riferimento valido al ritorno dalla chiamata. Il chiamante è responsabile della chiamata di Release sull'oggetto al termine dell'utilizzo.

Ad esempio, il metodo IMiniportWaveCyclic::NewStream chiama AddRef sugli oggetti del flusso, del gruppo di servizi e del canale DMA restituiti al chiamante (il driver della porta WaveCyclic). Il chiamante è responsabile del rilascio di questi riferimenti quando non ne ha più bisogno. Per un'implementazione del metodo IMiniportWaveCyclic::NewStream che mostra questo comportamento, vedere l'adattatore di esempio Sb16 nelle versioni precedenti di Microsoft Windows Driver Kit (WDK).

Eccezioni alle regole

Per una descrizione del riferimento non convenzionale contando che questo metodo esegue sul parametro di output DmaChannel , vedere IMiniportWavePci::NewStream.