Verweiszeiger
Verweiszeiger sind die einfachsten Zeiger und erfordern die geringste Verarbeitung durch den Clientstub. Wenn ein Clientprogramm einen Verweiszeiger an eine Remoteprozedur übergibt, enthält der Verweiszeiger immer die Adresse eines gültigen Speicherblocks. Sie verweist weiterhin auf denselben Speicherblock, wenn die Remoteprozedur abgeschlossen ist. Diese Zeiger werden hauptsächlich verwendet, um Verweissemantik zu implementieren und [out]-Parameter in C zuzulassen.
Im folgenden Beispiel ändert sich der Wert des Zeigers während des Aufrufs nicht, obwohl sich der Inhalt der Daten an der durch den Zeiger angegebenen Adresse ändern kann.
Ein Verweiszeiger weist die folgenden Merkmale auf:
- Er verweist immer auf gültigen Speicher und weist nie den Wert NULL auf.
- Sie ändert sich während eines Anrufs nie und verweist vor und nach dem Anruf immer auf denselben Speicher.
- Von der Remoteprozedur zurückgegebene Daten werden in den vorhandenen Speicher geschrieben.
- Auf den Speicher, auf den ein Verweiszeiger verweist, kann kein anderer Zeiger oder ein anderer Name in der Funktion zugreifen.
Verwenden Sie das [ref]-Attribut, um Verweiszeiger in Schnittstellendefinitionen anzugeben, wie im folgenden Beispiel gezeigt.
/* IDL file */
[
uuid(ba209999-0c6c-11d2-97cf-00c04f8eea45),
version(1.0)
]
interface RefPtrInterface
{
void RemoteFn([in, out, ref] char *pChar);
}
In diesem Beispiel wird der Parameter pChar als Zeiger auf ein einzelnes Zeichen und nicht als Array von Zeichen definiert. Dabei handelt es sich um einen [out]-Parameter und einen Verweiszeiger, der auf den Arbeitsspeicher verweist, den die Serverroutine RemoteFn mit Daten auffüllt.