Auf Englisch lesen

Freigeben über


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 .

Arrays mit fester Größe

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

Konformes Array

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.

Konformes variierende Array

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.

Variierende Arrays

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.

Komplexe Arrays

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.