Vollständige Zeiger
Im Gegensatz zu eindeutigen Zeigern unterstützen vollständige Zeiger Aliasing. Dies bedeutet, dass mehrere Zeiger auf die gleichen Daten verweisen können, wie in der folgenden Abbildung gezeigt:
Ein vollständiger Zeiger weist die folgenden Merkmale auf:
- Sie kann den Wert NULL aufweisen.
- Er kann während des Aufrufs von NULL in ungleich NULL geändert werden. Wenn sich der Wert in ungleich NULL ändert, ordnet der Clientstub bei der Rückgabe neuen Speicher zu. Das Clientprogramm sollte diesen Arbeitsspeicher freigeben, bevor er beendet wird.
- Sie kann während des Aufrufs von ungleich NULL in NULL geändert werden. Wenn sich der Wert in NULL ändert, ist die Anwendung für die Freigabe des Arbeitsspeichers verantwortlich.
- Der Wert kann von einem Wert ungleich NULL in einen anderen geändert werden.
- Auf den Speicher, auf den ein vollständiger Zeiger verweist, kann ein anderer Zeiger oder Name im Vorgang zugreifen.
- Rückgabedaten werden in vorhandenen Speicher geschrieben, wenn der Zeiger nicht über den Wert NULL verfügt.
Verwenden Sie das [ ptr ] -Attribut, um einen vollständigen Zeiger anzugeben, 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. Es ist möglich, dass beide Zeiger auf dieselbe Speicheradresse zeigen, 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 dies für die meisten Anwendungen nicht empfohlen.