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:
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.