Aktivierungsobjekte
Ein Aktivierungsobjekt ist ein Hilfsobjekt, das verwendet wird, um ein anderes Objekt zu erstellen, ähnlich wie eine Klassenfactory. Aktivierungsobjekte machen die SCHNITTSTELLE "OPCActivate" verfügbar.
Mit einem Aktivierungsobjekt können Sie die Erstellung des Zielobjekts zurückstellen, da Sie an einem POINTERActivate-Zeiger halten können, ohne das Zielobjekt zu erstellen. Aktivierungsobjekte können auch serialisiert und somit verwendet werden, um das Zielobjekt in einem anderen Prozess zu erstellen. Aktivierungsobjekte werden beispielsweise verwendet, um Pipelinekomponenten aus dem Anwendungsprozess an den PMP-Prozess (Protected Media Path) zu marshallen. Aktivierungsobjekte werden auch von bestimmten Enumerationsfunktionen verwendet, die eine Liste von POINTERActivate-Zeigern zurückgeben. Bevor die Anwendung das Zielobjekt erstellt, kann sie Informationen über das Objekt abrufen, indem attribute für das Aktivierungsobjekt untersucht werden.
Um das Zielobjekt aus einem Aktivierungsobjekt zu erstellen, rufen Sie die ACTIVATEActivate::ActivateObject-Methode auf. Der Aufrufer muss "SHUTDOWNActivate::ShutdownObject" aufrufen, wenn er das erstellte Objekt verwendet. Häufig erstellt die Anwendung das Aktivierungsobjekt, und die Mediensitzung ruft ActivateObject auf. In diesem Fall muss die Mediensitzung und nicht die Anwendung ShutdownObject aufrufen. In anderen Situationen empfängt die Anwendung einen POINTERActivate-Zeiger von der Mediensitzung, und die Anwendung ruft ActivateObject und ShutdownObject auf. (Beispiel: Wiedergeben geschützter Mediendateien.)
Aktivierungsobjekte können Über Attribute verfügen, und die INTERFACESActivate-Schnittstelle erbt die INTERFACESAttributes-Schnittstelle. Einige Aktivierungsobjekte verwenden Attribute, um das erstellte Objekt zu konfigurieren. Die spezifischen Attribute, die von den einzelnen Objekten unterstützt werden, sind in der Referenz für die Erstellungsfunktion dieses Aktivierungsobjekts dokumentiert. Legen Sie die Attribute mithilfe des POINTERActivate-Zeigers fest, den Sie von der Funktion erhalten.
Für die geschützte Wiedergabe werden Aktivierungsobjekte an den PMP-Prozess gemarshallt. Zur Unterstützung des Marshallings muss ein Aktivierungsobjekt die IPersistStream-Schnittstelle verfügbar machen. Darüber hinaus müssen sowohl das Aktivierungsobjekt als auch das erstellte Objekt vertrauenswürdige Komponenten sein, wenn PMP in einem geschützten Prozess ausgeführt wird. Dies ist keine Voraussetzung, wenn der PMP in einem ungeschützten Prozess geladen wird.
Um ein benutzerdefiniertes Pipelineobjekt (z. B. eine Mediensenke) innerhalb des PMP-Prozesses zu verwenden, müssen Sie ein Aktivierungsobjekt für Ihr Pipelineobjekt implementieren:
- Das Aktivierungsobjekt muss ÜBERAKTIVAktivieren und IPersistStream verfügbar machen.
- Die IPersist::GetClassID-Methode des Aktivierungsobjekts muss die CLSID des Aktivierungsobjekts zurückgeben.
- Optional können Sie die Methoden IPersistStream::Save und IPersistStream::Load implementieren, um alle Daten zu marshallen, die Sie zum Konfigurieren des Aktivierungsobjekts benötigen.
Wenn die Mediensitzung die Topologie innerhalb des PMP-Prozesses lädt, ruft sie CoCreateInstance auf, um eine neue Instanz Ihres Aktivierungsobjekts zu erstellen. Anschließend ruft sie DIE AKTIONACTIVATE::ActivateObject auf, um das Pipelineobjekt zu erstellen.