Teilen über


Top-Level und eingebettete Zeiger

Um zu verstehen, wie Zeiger und die zugehörigen Datenelemente in Microsoft RPC zugeordnet werden, müssen Sie zwischen Zeigern auf oberster Ebene und eingebetteten Zeigernunterscheiden. Es ist auch hilfreich, auf die Gruppe aller Zeiger zu verweisen, die keine Zeiger der obersten Ebene sind.

Zeiger auf oberster Ebene sind diejenigen, die als Namen von Parametern in Funktionsprototypen angegeben werden. Zeiger auf oberster Ebene und deren Referent werden immer auf dem Server zugewiesen.

eingebettete Zeiger zeiger, die in Datenstrukturen wie Arrays, Strukturen und Vereinigungen eingebettet sind. Wenn eingebettete Zeiger nur die Ausgabe in einen Puffer schreiben und null für die Eingabe sind, kann die Serveranwendung ihre Werte in ungleich NULL ändern. In diesem Fall weisen die Client-Stubs neuen Speicher für diese Daten zu.

Wenn der eingebettete Zeiger vor dem Aufruf nicht NULL auf dem Client ist, weisen die Stubs keinen Arbeitsspeicher auf dem Client zurück. Stattdessen versuchen die Stubs, den Speicher zu schreiben, der dem eingebetteten Zeiger zugeordnet ist, in den vorhandenen Speicher auf dem Client, der diesem Zeiger zugeordnet ist, und überschreiben die Daten bereits dort.

Anmerkung

Für Daten, die aus einem Puffer gelesen oder in einen Puffer geschrieben werden und die keine Puffergröße angeben, muss die Ausgabelänge kleiner oder gleich der Eingabelänge sein. Eine RPC-Ausnahme wird ausgelöst, wenn überlauf erkannt wird. Bei Zeichenfolgendaten wird die Ausgabelänge durch Überprüfen der Länge der Eingabezeichenfolge bestimmt. Aus diesem Grund dürfen Ausgabezeichenfolgen die Länge der Eingabezeichenfolgen nicht überschreiten. Es wird empfohlen, dies zu vermeiden, indem immer ein parameter mit einer Größe angegeben wird, um die Größe des Puffers anzugeben.

 

Eingebettete schreibgeschützte Zeiger werden in Kombinieren von Zeiger- und Richtungsattributenerläutert.

Der Begriff Nicht-Zeiger auf oberster Ebene bezieht sich auf alle Zeiger, die nicht als Parameternamen im Funktionsprototyp angegeben sind, einschließlich eingebetteter Zeiger und mehrerer Ebenen geschachtelter Zeiger.