Implementierung des Komponentenkategorien-Managers
Mit zunehmender Anzahl verfügbarer Komponenten wird es immer schwieriger, diese Komponenten zu verwalten. In Bezug auf die Schnittstellen, die sie verfügbar machen, sowie die Aufgaben, die sie ausführen, bieten viele Komponenten ähnliche Funktionen.
Häufig ist es notwendig, die Komponenten aufzulisten, die in einem bestimmten Kontext verwendet werden können. Beispiele hierfür sind das Dialogfeld Objekt einfügen , das in ZUSAMMENGESETZTEN OLE-Dokumenten verwendet wird, und das Dialogfeld Steuerelement einfügen , das in OLE-Steuerelementen verwendet wird. In diesen Dialogfeldern werden alle Komponenten aufgelistet, die die Schnittstellenverträge für zusammengesetzte Dokumente oder Steuerelemente erfüllen (oder behaupten, sie zu erfüllen). Diese vorhandenen Kategorien (OLE-Dokument, OLE-Steuerelement) implizieren keine exakte Schnittstellensignatur. OLE-Dokumente müssen einen bestimmten Satz von Kernschnittstellen verfügbar machen (z. B. IOleObject oder IPersistStorage), können aber auch zusätzliche Schnittstellen wie IOleLink verfügbar machen.
In der Vergangenheit wurden Komponenten gekennzeichnet, indem sie einen lesbaren Namen ("Insertable", "Control" usw.) als Unterschlüssel zum HKEY_CLASSES_ROOT\CLSID\{...} Registrierungsschlüssel hinzugefügt haben, der der Komponente entspricht. Dies funktioniert gut für eine zentrale Definition von Kategorien, riskiert jedoch Namenskonflikte, wenn viele unabhängige Parteien neue Kategorien definieren. Wie in anderen Bereichen von COM liegt die Lösung für die Bereitstellung eines erweiterbaren Namespace in der Verwendung von global eindeutigen Bezeichnern (GUIDs). Anstatt einen lesbaren Namen zu verwenden, wird jeder Kategorie eine eindeutige Zahl (CATID) zugewiesen.
Eine weitere Einschränkung bei der vorhandenen Kategorisierung besteht darin, dass sie auf das Ausdrücken der Funktionen der Komponente selbst beschränkt ist. Viele Komponenten erfordern bestimmte Funktionen aus den Containern. Wenn eine solche Komponente in einen Container eingefügt wird, kann das Einfügen fehlschlagen oder sich unerwartet verhalten, obwohl die Komponente die verträge erfüllt, die von einer ihrer Kategorien impliziert werden. Um die Komponenten aufzulisten, die in bestimmten Situationen erfolgreich verwendet werden können, müssen die Funktionen der Komponente und des Containers berücksichtigt werden.
Aus diesen Überlegungen wurden die folgenden Änderungen an der vorhandenen Kategorisierung vorgenommen:
- Kategorien werden mithilfe von CATIDs angegeben, die global eindeutige Bezeichner sind.
- Unter dem Unterschlüssel Komponenten des HKEY_CLASSES_ROOT\CLSID Registrierungsschlüssels wurden zwei separate Unterschlüssel entwickelt, "Implementierte Kategorien" und "Erforderliche Kategorien". Diese Unterschlüssel enthalten die Listen von CATIDs, die von der Komponente bereitgestellt werden oder die der Container der Komponente bereitstellen muss.
Um die Verwaltung der Komponentenkategorien zu vereinfachen, werden Kategorien an einer zentralen Stelle in der Registrierung aufgeführt: HKEY_CLASSES_ROOT\Component Categories. Dieser Schlüssel listet die installierten Kategorien sowohl mit ihrer CATID als auch mit lokalisierten, für Menschen lesbaren Namen auf.
Weitere Informationen finden Sie in den folgenden Themen:
- Kategorisieren nach Komponentenfunktionen
- Kategorisieren nach Containerfunktionen
- Komponentenkategorien-Manager
- Standardklassen und Zuordnungen
- Definieren von Komponentenkategorien
- Zuordnen von Symbolen zu einer Kategorie