Elemente der Typbibliothek

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu Typbibliothekseditor


Die Benutzeroberfläche der Typbibliothek, wie sie im Typbibliothekseditor angezeigt wird, kann auf den ersten Blick ziemlich kompliziert erscheinen. Dies rührt daher, weil sie Informationen zu einer Vielzahl von Elementen darstellt, die jeweils über unterschiedliche Merkmale verfügen. Viele dieser Merkmale sind jedoch allen Elementen gemeinsam. Beispielsweise weist jedes Element (einschließlich der Typbibliothek selbst) folgende Merkmale auf:

  • Name, der zur Beschreibung des Elementes dient und über den im Quelltext auf dieses Element Bezug genommen wird.
  • GUID (global eindeutige Kennung), d.h. ein eindeutiger 128-Bit-Wert, anhand dessen COM das Element identifiziert. Der Typbibliothek, den CoClasses und Interfaces muss eine GUID zugewiesen werden. Bei anderen Elementen ist die Angabe einer GUID optional.
  • Versionsnummer, die zur Unterscheidung mehrerer Versionen eines Elementes dient. Diese Angabe ist stets optional, sollte jedoch für CoClasses und Interfaces festgelegt werden, da einige Entwicklungswerkzeuge die Angabe einer Versionsnummer erfordern.
  • Hilfeeigenschaften, die das Element mit einem Hilfethema verknüpfen. Hierzu gehören Werte für Hilfe-String, Hilfekontext und Hilfe-String-Kontext. Der Hilfekontext wird in konventionellen Windows-Hilfesystemen eingesetzt, in denen der Typbibliothek eine eigene Hilfedatei zugeordnet ist. Der Hilfe-String-Kontext wird verwendet, wenn Hilfetexte in einer getrennten DLL bereitgestellt werden. Die Werte für Hilfekontext und Hilfe-String-Kontext bezeichnen eine Hilfedatei oder eine DLL, die auf der Registerkarte Attribute der Typbibliothek angegeben wird. Diese Angabe ist stets optional.

Interfaces

Das Interface beschreibt die Methoden (sowie alle Eigenschaften, die als Get- und Set-Funktionen implementiert sind) eines Objekts, auf die über eine virtuelle Funktionstabelle (vtable) zugegriffen werden muss. Besitzt ein Interface das Flag Dual, erbt es von IDispatch, und das Objekt kann über die OLE-Automatisierung sowohl früh gebundenen vtable-Zugriff als auch Laufzeit-Bindung bereitstellen. Standardmäßig werden alle hinzugefügten Interfaces als dual gekennzeichnet.

Interfaces können Methoden und Eigenschaften als Member zugewiesen werden. Diese werden im Objektlistenbereich als untergeordnete Elemente unter dem Interface-Knoten angezeigt. Interface-Eigenschaften werden durch Get- und Set-Methoden repräsentiert, die dem Lesen und Schreiben der Daten dienen, die der Eigenschaft zugrunde liegen. Im Baumdiagramm werden sie mit speziellen Symbolen angezeigt, die auf ihren Zweck verweisen.

Spezielle Symbole für 'get'- und 'set'-Methoden:



Putprop.jpg

Eigenschaftsfunktion "Schreiben als Wert" (set, put)

Refprop.jpg

Eigenschaftsfunktion "Lesen (get) |Schreiben (set, put)|Schreiben per Referenz"

Getprop.jpg

Eigenschaftsfunktion "Lesen" (get).



Anmerkung:  Schreiben per Referenz: Wenn Sie Eigenschaften als Schreiben-per-Referenz definieren, werden sie als Zeiger und nicht als Wert übergeben. Einige Anwendungen, wie Visual Basic, nutzen das Schreiben per Referenz (sofern verfügbar), um die Leistung zu optimieren. Soll die Eigenschaft nur als Referenz und nicht als Wert übergeben werden, verwenden Sie den Eigenschaftstyp Nur per Referenz. Um die Eigenschaft sowohl per Referenz als per Wert zu übergeben, wählen Sie Lesen > Schreiben > Schreiben per Ref. Sie rufen dieses Menü auf, indem Sie in der Symbolleiste auf den Pfeil neben dem Eigenschaftssymbol klicken.

Eigenschaften und Methoden können mit Hilfe der Symbolschaltfläche oder des lokalen Menüs des Objektlistenbereichs hinzugefügt werden. Syntax und Attribute legen Sie fest, indem Sie die Eigenschaft oder Methode markieren und auf den Registerkarten mit Typinformationen die gewünschten Einstellungen vornehmen.

Auf der Registerkarte Attribute legen Sie den Namen und die Dispatch-ID (um Aufrufe über IDispatch zu ermöglichen) der Eigenschaft oder Methode fest. Eigenschaften kann zudem ein Typ zugewiesen werden. Die Funktionssignatur wird mit Hilfe der Registerkarte Parameter erstellt, auf der Sie Parameter hinzufügen, entfernen und neu anordnen, den Typ und gegebenenfalls notwendige Modifizierer sowie die Rückgabetypen der Funktion festlegen können.

Anmerkung:  Bei Interface-Elementen, die Exceptions auslösen müssen, sollte ein HRESULT-Wert zurückgegeben und der Parameter (PARAM_RETVAL) für den Rückgabewert definiert werden. Deklarieren Sie diese Methoden unter Verwendung der safecall-Aufrufkonvention.

Wenn Sie einem Interface Eigenschaften und Methoden zuweisen, werden diese implizit der zugehörigen CoClass zugeordnet. Aus diesem Grund lässt es der Typbibliothekseditor nicht zu, dass einer CoClass selbst Eigenschaften und Methoden hinzugefügt werden.

Dispatch-Interfaces

Interfaces werden häufiger als Dispatch-Interfaces dazu verwendet, die Eigenschaften und Methoden eines Objekts zu beschreiben. Auf Dispatch-Interfaces kann nur über das dynamische Binden zugegriffen werden, während für Interfaces das statische Binden über eine virtuelle Funktionstabelle (Vtable) möglich ist .

Sie können Dispatch-Interfaces auf dieselbe Weise wie anderen Interfaces Methoden und Eigenschaften hinzufügen. Wenn Sie eine Eigenschaft für ein Dispatch-Interface definieren, können Sie allerdings keinen Funktionstyp und keine Parametertypen angeben.

CoClasses

Eine CoClass beschreibt ein eindeutiges COM-Objekt, das ein oder mehrere Interfaces implementiert. Beim Definieren einer CoClass müssen Sie angeben, welches implementierte Interface das Standard-Interface für das Objekt ist und optional, welches Disp-Interface die Standardquelle für Ereignisse ist. Beachten Sie, dass Sie einer CoClass im Typbibliothekseditor keine Eigenschaften und Methoden hinzufügen können. Clients wird über Interfaces, die mit Hilfe der Registerkarte Implementierung der CoClass zugeordnet werden, der Zugriff auf Eigenschaften und Methoden ermöglicht.

Typdefinitionen

Enum-Typen, Aliase, Records und Unions deklarieren Typen, die anschließend in der Typbibliothek eingesetzt werden können.

Enum-Typen (Aufzählungstypen) bestehen aus einer Liste von Konstanten, die numerisch sein müssen. Als Werte werden normalerweise dezimale oder hexadezimale Integer-Zahlen verwendet. Der Vorgabewert ist Null. Sie können einem Enum-Typ Konstanten hinzufügen, indem Sie diesen Typ in der Objektliste auswählen und in der Symbolleiste auf die Schaltfläche Konstante klicken oder im lokalen Menü des Objektlistenbereichs den Befehl Neu > Konst wählen.

Anmerkung:  Sie sollten für Ihre Enum-Elemente immer Hilfe-Strings angeben, die deren Bedeutung beschreiben. Das folgende Beispiel zeigt einen Enum-Typ für eine Maustaste und Hilfetexte für die verschiedenen Elemente.



 mbLeft = 0 [helpstring 'mbLeft'];
 mbRight = 1 [helpstring 'mbRight'];
 mbMiddle = 3 [helpstring 'mbMiddle'];



 typedef enum TxMouseButton
 {
 [helpstring("mbLeft")]
 mbLeft = 0,
 [helpstring("mbRight)]
 mbRight = 1.
 [helpstring("mbMiddle)]
 mbMiddle = 2
 } TxMouseButton;



Ein Alias erstellt einen Alias (Typdefinition) für einen Typ. Mit dem Alias können Sie Typen definieren, die in anderen Typinformationen, z.B. in Records oder Unioins, verwendet werden sollen. Sie weisen mit Hilfe des Attributs Typ auf der Registerkarte Attribute den Alias der zugrunde liegenden Typdefinition zu.

Ein Record besteht aus einer Liste von Strukturelementen oder Feldern. Eine Union ist ein Record mit nur einem varianten Teil. Ein Union-Element besteht wie ein Record aus einer Liste von Strukturelementen oder Feldern. Im Gegensatz zu den Membern von Records belegt jeder Member einer Union jedoch dieselbe physische Adresse, so dass nur ein logischer Wert gespeichert werden kann.

Sie fügen Felder zu einem Record oder einer Union hinzu, indem Sie das Element in der Objektliste markieren und in der Symbolleiste auf die Schaltfläche Feld klicken oder die rechte Maustaste drücken und im lokalen Menü des Objektlistenbereichs Feld wählen. Jedes Feld verfügt über einen Namen und einen Typ, die Sie auf der Registerkarte Attribute zuweisen. Für Records und Unions kann ein optionales Tag definiert werden.

Sie können für Member einen vordefinierten Typ angeben oder vor der Definition des Records mit Hilfe eines Alias-Objekts einen Typ definieren.

Module

Module definieren eine Gruppe von Funktionen, normalerweise DLL-Einsprungspunkte. Sie definieren ein Modul wie folgt:

  • Sie geben auf der Registerkarte Attribute eine DLL an, die das Modul repräsentiert.
  • Sie fügen mit Hilfe der Symbolleiste oder dem lokalen Menü der Objektliste Methoden und Konstanten hinzu. Sie müssen die Attribute jeder Methode und Konstante festlegen, indem Sie sie in der Objektliste auswählen und auf der Registerkarte Attribute die gewünschten Werte festlegen.

Für Modulmethoden muss auf der Registerkarte Attribute ein Name und DLL-Einsprungspunkt angegeben werden. Auf der Registerkarte Parameter deklarieren Sie die Parameter und Rückgabetypen der Funktion.

Für Modulkonstanten geben Sie auf der Registerkarte Attribute einen Namen, einen Typ und einen Wert an.

Anmerkung:  Der Typbibliothekseditor generiert keine Deklarationen oder Implementierungen für ein Modul. Die angegebene DLL muss im Rahmen eines eigenen Projekts erstellt werden.

Siehe auch