Freigeben über


Referenzzeiger

Referenzzeiger sind die einfachsten Zeiger und erfordern die geringste Verarbeitung durch den Client-Stub. Wenn ein Clientprogramm einen Verweiszeiger an eine Remoteprozedur übergibt, enthält der Referenzzeiger 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 Referenzsemantik zu implementieren und [] 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 vom Zeiger angegebenen Adresse ändern kann.

Daten, die bei einer statischen Verweiszeigeradresse geändert werden

Ein Referenzzeiger 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 immer auf denselben Speicher vor und nach dem Anruf.
  • Von der Remoteprozedur zurückgegebene Daten werden in den vorhandenen Speicher geschrieben.
  • Auf den Speicher, auf den ein Verweiszeiger verweist, kann von keinem anderen Zeiger oder einem anderen Namen in der Funktion zugegriffen werden.

Verwenden Sie das Attribut [Ref] zum Angeben von Referenzzeigern in Schnittstellendefinitionen, 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. Es handelt sich um einen [] -Parameter und einen Referenzzeiger, der auf den Arbeitsspeicher verweist, den die Serverroutine RemoteFn mit Daten ausfüllt.