Come implementare IUnknown

[La funzionalità associata a questa pagina, DirectShow, è una funzionalità legacy. È stata sostituita da MediaPlayer, FMMediaEngine e Audio/Video Capture in Media Foundation. Queste funzionalità sono state ottimizzate per Windows 10 e Windows 11. Microsoft consiglia vivamente che il nuovo codice usi MediaPlayer, FMMediaEngine e Audio/Video Capture in Media Foundation anziché DirectShow, quando possibile. Microsoft suggerisce che il codice esistente che usa le API legacy venga riscritto per usare le nuove API, se possibile.

Microsoft DirectShow si basa sul modello a oggetti componente (COM). Se si scrive un filtro personalizzato, è necessario implementarlo come oggetto COM. Le classi di base DirectShow forniscono un framework da cui eseguire questa operazione. L'uso delle classi di base non è obbligatorio, ma può semplificare il processo di sviluppo. Questo articolo descrive alcuni dei dettagli interni degli oggetti COM e la relativa implementazione nelle classi di base DirectShow.

Questo articolo presuppone che si sappia come programmare le applicazioni client COM, in altre parole, che si comprendono i metodi in IUnknown, ma non presuppone alcuna esperienza precedente nello sviluppo di oggetti COM. DirectShow gestisce molti dettagli dello sviluppo di un oggetto COM. Se si ha esperienza nello sviluppo di oggetti COM, è necessario leggere la sezione Using CUnknown, che descrive la classe di base CUnknown .

COM è una specifica, non un'implementazione. Definisce le regole che un componente deve seguire; l'applicazione di tali regole viene lasciata allo sviluppatore. In DirectShow tutti gli oggetti derivano da un set di classi di base C++. I costruttori e i metodi della classe di base eseguono la maggior parte del lavoro "bookkeeping" COM, ad esempio mantenendo un numero di riferimenti coerente. Derivando il filtro da una classe di base, si ereditano le funzionalità della classe. Per usare in modo efficace le classi di base, è necessaria una conoscenza generale del modo in cui implementano la specifica COM.

Questo articolo contiene gli argomenti seguenti.

DirectShow e COM