Drei Zeigertypen

MIDL unterstützt drei Arten von Zeigern, um eine Vielzahl von Anwendungen zu unterstützen. Die drei verschiedenen Ebenen werden als Verweis, eindeutige und vollständige Zeiger bezeichnet und werden durch die Attribute [ref], [unique] und [ptr] angegeben. Die durch diese Attribute beschriebenen Zeigerklassen schließen sich gegenseitig aus. Zeigerattribute können auf Zeiger in Typdefinitionen, Funktionsrückgabetypen, Funktionsparametern, Membern von Strukturen oder Unionen oder Arrayelementen angewendet werden.

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

Jedes Zeigerattribute, das für einen Parameter in der Syntax einer Funktionsdeklaration platziert wird, wirkt sich nur auf den deklarator für diesen Parameter am rechten Rand aus. Um andere Zeigerdeklaratoren zu beeinflussen, müssen zwischene benannte Typen verwendet werden.

Funktionen, die einen Zeiger zurückgeben, können ein Zeigerattribute als Funktionsattribute aufweisen. Die Attribute [eindeutig] 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 Type-Attribut in typedef-Konstrukten angewendet werden.

Wenn kein Zeigerattribut als Feld- oder Typattribut angegeben wird, werden Zeigerattribute gemäß den Regeln für eine nicht zugewiesene 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 vollständige Zeiger.

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

  1. Ein explizites Zeigerattribute, das auf die Verwendungswebsite angewendet wird.
  2. Das [ref] -Attribut, wenn der nicht zugeordnete 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 [unique] -Attribut.

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