Teilen über


Ganzzeiger

Im Gegensatz zu eindeutigen Zeigern unterstützen vollständige Zeiger Aliasing. Dies bedeutet, dass mehrere Zeiger auf dieselben Daten verweisen können, wie in der folgenden Abbildung dargestellt:

zwei Zeiger, die auf dieselben Daten verweisen

Ein vollständiger Zeiger weist die folgenden Merkmale auf:

  • Er kann den Wert NULL aufweisen.
  • Sie kann während des Aufrufs von NULL in Nicht-Null wechseln. Wenn sich der Wert in "ungleich NULL" ändert, weist der Client-Stub dem rückgabebezogenen neuen Speicher zu. Das Clientprogramm sollte diesen Speicher freigeben, bevor es beendet wird.
  • Sie kann während des Aufrufs von "nicht null" in "NULL" geändert werden. Wenn sich der Wert in NULL ändert, ist die Anwendung dafür verantwortlich, den Arbeitsspeicher freizugeben.
  • Der Wert kann von einem Wert ungleich Null in einen anderen geändert werden.
  • Der Speicher, auf den ein vollständiger Zeiger verweist, kann von einem anderen Zeiger oder Namen im Vorgang aufgerufen werden.
  • Rückgabedaten werden in vorhandenen Speicher geschrieben, wenn der Zeiger nicht den Wert NULL aufweist.

Verwenden Sie das Attribut [ptr ] zum Angeben eines vollständigen Zeigers, wie im folgenden Beispiel gezeigt:

/* IDL file */
[ 
  uuid(ba209999-0c6c-11d2-97cf-00c04f8eea45),
  version(1.0)
]
interface FullPtrInterface
{
  void RemoteFn([in,ptr,string]) char *ptrName1,
                [in,ptr,string]  char *ptrName2);
}

In diesem Beispiel werden die Parameter ptrName1 und ptrName2- als vollständige Zeiger auf eine Zeichenfolge definiert. Beide Zeiger können auf dieselbe Speicheradresse verweisen, die eine einzelne Zeichenfolge enthält.

[ptr] ist erforderlich, wenn Aliasing unterstützt wird. Da es jedoch die meiste Verarbeitung aller in RPC verfügbaren Zeiger erfordert, wird es für die meisten Anwendungen nicht empfohlen.