Plug-In-Verteiler

Plug-In-Verteiler (PIDs) sind eine Möglichkeit, die Funktionalität des Filtergraph-Managers zu erweitern. Ein Plug-In-Verteiler ist ein COM-Objekt, das der Filtergraph-Manager zur Laufzeit aggregiert. Anwendungen erhalten über den Filtergraph-Manager Zugriff auf die PID.

Wenn der Filtergraph-Manager nach einer Schnittstelle abgefragt wird, die er nicht unterstützt, durchsucht er die Registrierung nach einem Schlüssel in der folgenden Form:

HKEY_CLASSES_ROOT\Interface\IID\Distributor

IID ist eine Zeichenfolge, die den Schnittstellenbezeichner enthält. Wenn der Registrierungseintrag vorhanden ist, definiert der Wert des Eintrags den Klassenbezeichner (CLSID) einer PID, die die -Schnittstelle unterstützt. Der Filtergraph-Manager aggregiert die PID und gibt einen Schnittstellenzeiger zurück, der als äußerer IUnknown für die PID fungiert. Wenn die Anwendung Methoden für die Schnittstelle aufruft, werden sie tatsächlich auf der PID aufgerufen. Das Vorhandensein der PID ist für die Anwendung jedoch transparent.

Der Begriff Verteiler stammt aus der Tatsache, dass eine PID ihren äußeren IUnknown-Zeiger nach Schnittstellen im Filtergraph-Manager abfragen kann. Durch Aufrufen der IFilterGraph::EnumFilters-Methode kann die PID die Filter im Diagramm aufzählen und Methodenaufrufe an diese Filter verteilen. Auf diese Weise kann eine PID als einzelner Steuerungspunkt für die Anwendung dienen, um Methoden für Filter aufzurufen.

Wenn der Filtergraph-Manager eine PID aggregiert, fragt er die PID nach der IDistributorNotify-Schnittstelle ab. Wenn die PID diese Schnittstelle unterstützt, verwendet der Filtergraph-Manager sie, um die PID über Änderungen im Diagramm zu benachrichtigen:

Um eine benutzerdefinierte PID zu implementieren, erstellen Sie ein COM-Objekt, das Aggregation unterstützt. Sie muss eine Schnittstelle unterstützen, die der Filtergraph-Manager nicht bereits unterstützt. Optional kann die IDistributorNotify-Schnittstelle unterstützt werden.

Wenn die PID Schnittstellenzeiger vom Filtergraph-Manager erhält, sollte sie sofort losgelassen werden. Andernfalls wird möglicherweise ein Zirkelverweiszähler erstellt, der verhindern kann, dass der Filtergraph-Manager zerstört wird. Das Halten eines Verweiszählers auf dem Filterdiagramm-Manager ist in jedem Fall nicht erforderlich, da der Filtergraph-Manager die Lebensdauer der PID steuert.

Da eine PID speziell für die Aggregation durch den Filtergraph-Manager entwickelt wurde, sollten Sie dies in der Konstruktormethode der PID erzwingen. Überprüfen Sie, ob der äußere IUnknown-Zeiger NULL ist, und geben Sie in diesem Falle den Fehlercode VFW _ E NEED OWNER _ _ zurück. (Siehe Fehler- und Erfolgscodes.) Außerdem können Sie den äußeren IUnknown-Zeiger für die IGraphBuilder-Schnittstelle abfragen, um zu verhindern, dass andere Objekte die PID aggregieren. Gibt einen Fehlercode zurück, wenn das Objekt IGraphBuilder nicht verfügbar macht.