Freigeben über


Drei Zeigertypen

MIDL unterstützt drei Arten von Zeigern für eine breite Palette von Anwendungen. Die drei verschiedenen Ebenen werden als Bezugs-, eindeutigen und vollständigen Zeiger bezeichnet und werden durch die Attribute [Bezug], [eindeutigen]und [ptr], bzw. [ptr]angegeben. Die von diesen Attributen beschriebenen Zeigerklassen schließen sich gegenseitig aus. Zeigerattribute können auf Zeiger in Typdefinitionen, Funktionsrücklauftypen, Funktionsparametern, Membern von Strukturen oder Vereinigungen oder Arrayelementen angewendet werden.

Eingebettete Zeiger sind Zeiger, die Mitglieder von Strukturen oder Gewerkschaften sind. Sie können auch Elemente von Arrays sein. In der [in] Richtung wird davon ausgegangen, dass eingebettete [bezug] Zeiger auf gültigen Speicher verweisen und darf nicht null sein. Diese Situation gilt rekursiv für alle [ref] Zeigern, auf die sie verweisen. In der [in] Richtung können eingebettete [eindeutig] und vollständige Zeiger (Zeiger mit dem attribut [ptr]) null sein.

Jedes Zeiger-Attribut, das in einer Parametersyntax einer Funktionsdeklaration platziert wird, wirkt sich nur auf den äußerst rechten Zeiger-Deklarator für diesen Parameter aus. Um andere Zeigerdeklaratoren zu beeinflussen, müssen zwischene benannte Typen verwendet werden.

Funktionen, die einen Zeiger zurückgeben, können ein Zeiger-Attribut als Funktionsattribute aufweisen. Die attribute [unique] und [ptr] müssen auf Funktionsrückgabetypen angewendet werden. Memberdeklarationen, die Zeiger sind, können ein Zeigerattribute als Feldattribute angeben. Ein Zeiger-Attribut kann auch als Typattribute in typedef--Konstrukten angewendet werden.

Wenn kein Zeigerattribut als Feld- oder Typattribut angegeben wird, werden Zeigerattribute gemäß den Regeln für eine nicht attributierte Zeigerdeklaration wie folgt angewendet.

Im DCE-Kompatibilitätsmodus werden Zeigerattribute in der definierenden IDL-Datei bestimmt. Wenn in der definierenden Schnittstelle ein [pointer_default**]**-Attribut angegeben ist, wird dieses Attribut verwendet. Wenn kein [pointer_default] Attribut vorhanden ist, sind alle nicht zugeordneten Zeiger vollzeiger.

Im Microsoft-Erweiterungsmodus können Zeigerattribute durch Importieren von IDL-Dateien bestimmt und in der folgenden Reihenfolge angewendet werden:

  1. Ein explizites Zeiger-Attribut, das auf der Verwendungswebsite angewendet wird.
  2. Das attribut [ref], wenn der nicht attributierte Zeiger ein Zeigerparameter der obersten Ebene ist.
  3. Ein [pointer_default] Attribut, das in der definierenden Schnittstelle angegeben ist.
  4. Ein [pointer_default] Attribut, das in der Basisschnittstelle angegeben ist.
  5. Das attribut [unique].

Das [pointer_default] Schnittstellenattribute gibt die Standardzeigerattribute an, die auf einen Zeigerdeklarator in einem Typ, Parameter oder Rückgabetypdeklaration angewendet werden sollen, wenn diese Deklaration kein explizites Zeiger-Attribut zugewiesen hat. Das [pointer_default] Schnittstellenattribut gilt nicht für einen nicht zugeordneten Zeiger auf oberster Ebene eines Parameters, der als [ref]angenommen wird.