Arrays (RPC)
Mehrere Arraykategorien wurden basierend auf ihren Leistungsmerkmalen definiert, in erster Linie, ob das Array blockiert werden kann.
Für einige Kategorien, z. B. ein Array mit fester Größe, sind zwei Typen von Arraydeskriptoren vorhanden. Sie werden durch einen Fix im Namen des führenden FC-Tokens angegeben.
Formatieren von Zeichen | BESCHREIBUNG |
---|---|
SM | Die Gesamtgröße des Typs kann in einer 16-Bit-Version ohne Vorzeichen dargestellt werden. |
LG | Die Gesamtgröße des Typs erfordert eine 32-Bit-Länge ohne Vorzeichen, um dargestellt zu werden. |
Felder, die für Arrays gemeinsam sind:
total_size
Gesamtgröße des Arrays im Arbeitsspeicher in Bytes. Dies entspricht der Drahtgröße nach der Ausrichtung. Die Gesamtgröße wird für Kategorien berechnet, für die das Abstandsproblem nicht vorhanden ist, und die Größe ist die tatsächliche Arraygröße.
element_size
Gesamtgröße im Arbeitsspeicher eines einzelnen Elements des Arrays, einschließlich Auffüllung (dies kann nur bei komplexen Arrays der Fall sein).
element_description
Beschreibung des Arrayelementtyps.
pointer_layout
Weitere Informationen finden Sie im Thema Zeigerlayout .
Eine Arrayformatzeichenfolge mit fester Größe wird für Arrays mit bekannter Größe generiert und kann daher in den Marshallingpuffer kopiert werden. Die beiden festen Arraydeskriptorformate sind wie folgt:
FC_SMFARRAY alignment<1>
total_size<2>
[pointer_layout<>]
element_description<>
FC_END
und
FC_LGFARRAY alignment<1>
total_size<4>
[pointer_layout<>]
element_description<>
FC_END
Ein konformes Array kann blockkopiert werden, sobald die Größe des Arrays bekannt ist.
FC_CARRAY alignment<1>
element_size<2>
conformance_description<>
[pointer_layout<>]
element_description<>
FC_END
Die conformance_description<> ist ein Korrelationsdeskriptor und verfügt über 4 oder 6 Bytes, je nachdem, ob /robust verwendet wird.
Ein konformes, variierende Array kann auch blockkopiert werden.
FC_CVARRAY alignment<1>
element_size<2>
conformance_description<>
variance_description<>
[pointer_layout<>]
element_description<>
FC_END
Der conformance_description<> und variance_description<> ist ein Korrelationsdeskriptor und verfügt über 4 oder 6 Byte, je nachdem, ob /robust verwendet wird.
Die unterschiedlichen Arrays haben je nach Größe des Arrays zwei Möglichkeiten.
FC_SMVARRAY alignment<1>
total_size<2>
number_elements<2>
element_size<2>
variance_description<>
[pointer_layout<>]
element_description<>
FC_END
FC_LGVARRAY alignment<1>
total_size<4>
number_elements<4>
element_size<2>
variance_description<4>
[pointer_layout<>]
element_description<>
FC_END
Die variance_description<> ist ein Korrelationsdeskriptor und verfügt je nach verwendetem /robust über 4 oder 6 Bytes.
Bei unterschiedlichen Arrays, die innerhalb einer Struktur eingebettet sind, ist das Feld Offset<2> des variance_description<> ein relativer Offset von der Position des variierenden Arrays in der Struktur zum beschreibenden Feld der Varianz. Der Offset ist in der Regel relativ zum Anfang der Struktur.
Ein komplexes Array ist ein beliebiges Array mit einem Element, das verhindert, dass es blockiert wird. Daher müssen zusätzliche Aktionen ausgeführt werden. Diese Elemente machen ein Array komplex:
- einfache Typen: ENUM16, __INT3264 (nur auf 64-Bit-Plattformen), ein Integral mit [Bereich]
- Verweis- und Schnittstellenzeiger (alle Zeiger auf 64-Bit-Plattformen)
- Unions
- komplexe Strukturen (eine vollständige Liste der Gründe für eine komplexe Struktur finden Sie im Thema Beschreibung komplexer Strukturen)
- mit [transmit_as], [user_marshal] definierte Elemente
- Alle mehrdimensionalen Arrays mit mindestens einer konformen und/oder unterschiedlichen Dimension sind unabhängig vom zugrunde liegenden Elementtyp komplex.
Die Beschreibung des komplexen Arrays lautet wie folgt:
FC_BOGUS_ARRAY alignment<1>
number_of_elements<2>
conformance_description<>
variance_description<>
element_description<>
FC_END
Das feld number_of_elements<2> ist null, wenn das Array konform ist.
Der conformance_description<> und variance_description<> ist ein Korrelationsdeskriptor und verfügt über 4 oder 6 Byte, je nachdem, ob /robust verwendet wird. Wenn das Array Konformität und/oder Varianz aufweist, weisen die conformance_description<> und/oder variance_description<> Felder gültige Beschreibungen auf, andernfalls werden die ersten 4 Byte des Korrelationsdeskriptors auf 0xFFFFFFFF festgelegt. Wenn die Flags vorhanden sind, werden sie auf 0 (null) festgelegt.