Oggetti attivazione
Un oggetto di attivazione è un oggetto helper usato per creare un altro oggetto, in modo simile a una class factory. Gli oggetti di attivazione espongono l'interfaccia IMFActivate.
Un oggetto attivazione consente di rinviare la creazione dell'oggetto di destinazione, perché è possibile tenere premuto un IMFActivate puntatore senza creare l'oggetto di destinazione. Gli oggetti di attivazione possono anche essere serializzati e quindi usati per creare l'oggetto di destinazione in un altro processo. Ad esempio, gli oggetti di attivazione vengono usati per effettuare il marshalling dei componenti della pipeline dal processo dell'applicazione al processo pmP (Protected Media Path). Gli oggetti attivazione vengono usati anche da determinate funzioni di enumerazione che restituiscono un elenco di IMFActivate puntatori. Prima che l'applicazione crei l'oggetto di destinazione, può ottenere informazioni sull'oggetto esaminando gli attributi nell'oggetto di attivazione.
Per creare l'oggetto di destinazione da un oggetto attivazione, chiamare il metodo IMFActivate::ActivateObject. Il chiamante deve chiamare IMFActivate::ShutdownObject al termine dell'utilizzo dell'oggetto creato. Spesso l'applicazione crea l'oggetto di attivazione e la sessione multimediale chiama ActivateObject. In tal caso, la sessione multimediale, non l'applicazione, deve chiamare ShutdownObject. In altre situazioni, l'applicazione riceve un puntatoreIMFActivate dalla sessione multimediale e l'applicazione chiama ActivateObject e ShutdownObject. Ad esempio, vedere Come riprodurre file multimediali protetti.)
Gli oggetti attivazione possono avere attributi e l'interfaccia IMFActivate eredita l'interfaccia IMFAttributes. Alcuni oggetti di attivazione usano attributi per configurare l'oggetto creato. Gli attributi specifici supportati da ogni oggetto sono documentati nel riferimento per la funzione di creazione dell'oggetto di attivazione. Impostare gli attributi usando il IMFActivate puntatore ricevuto dalla funzione.
Per la riproduzione protetta, gli oggetti di attivazione vengono sottoposto a marshalling al processo PMP. Per supportare il marshalling, un oggetto di attivazione deve esporre l'interfaccia IPersistStream. Inoltre, sia l'oggetto di attivazione che l'oggetto creato devono essere componenti attendibili se pmP è in esecuzione in un processo protetto. Questo non è un requisito quando il PMP viene caricato in un processo non protetto.
Per usare un oggetto pipeline personalizzato ,ad esempio un sink multimediale, all'interno del processo PMP, è necessario implementare un oggetto di attivazione per l'oggetto pipeline:
- L'oggetto attivazione deve esporre IMFActivate e IPersistStream.
- Il metodo IPersist::GetClassID dell'oggetto attivazione deve restituire il CLSID dell'oggetto di attivazione.
- Facoltativamente, è possibile implementare i metodi IPersistStream::Save e IPersistStream::Load per effettuare il marshalling di tutti i dati necessari per configurare l'oggetto attivazione.
Quando la sessione multimediale carica la topologia all'interno del processo PMP, chiama CoCreateInstance per creare una nuova istanza dell'oggetto di attivazione. Chiama quindi IMFActivate::ActivateObject per creare l'oggetto pipeline.
Argomenti correlati