length_is-Attribut

Das Attribut [length_is] gibt die Anzahl der zu übertragenden Arrayelemente an. Sie müssen einen nicht negativen Wert angeben.

[length_is( limited-expression-list )]

Parameter

limited-expression-list

Gibt mindestens einen C-Sprachausdruck an. Jeder Ausdruck wird als ganze Zahl ausgewertet, die die Anzahl der zu übertragenden Arrayelemente darstellt. Der MIDL-Compiler unterstützt bedingte Ausdrücke, logische Ausdrücke, relationale Ausdrücke und arithmetische Ausdrücke. MIDL lässt keine Funktionsaufrufe in Ausdrücken zu und lässt keine Inkrement- und Dekrementoperatoren zu. Trennen Sie mehrere Ausdrücke durch Kommas.

Bemerkungen

Das Attribut [length_is] bestimmt den Wert der Arrayindizes, die dem Attribut [last_is] entsprechen, wenn [last_is] nicht angegeben wird. Die Beziehung zwischen diesen Arrayindizes ist wie folgt: length = last - first + 1.

Das [length_is] -Attribut kann nicht gleichzeitig mit dem [last_is] -Attribut oder dem [string] -Attribut verwendet werden.

Um eine gezählte Zeichenfolge mit einem [length_is]- oder [last_is]-Attribut zu definieren, verwenden Sie ein Zeichenarray oder einen Zeiger ohne das Attribut [string].

Die Verwendung eines konstanten Ausdrucks mit dem Attribut [length_is] ist eine unangemessene Verwendung des Attributs. Dies ist legal, aber ineffizient und führt zu einer langsameren Marshallung von Code.

Sie können die Attribute [size_is] und [length_is] zusammen verwenden. Wenn Sie dies tun, steuert das Attribut [size_is] die Menge des für die Daten zugewiesenen Arbeitsspeichers. Das Attribut [length_is] gibt an, wie viele Elemente übertragen werden. Die durch die Attribute [size_is] und [length_is] angegebene Arbeitsspeichermenge muss nicht identisch sein. Für instance kann Ihr Client einen [in, out]-Parameter an einen Server übergeben und eine große Speicherzuordnung mit [size_is] angeben, obwohl er eine kleine Anzahl von Datenelementen angibt, die mit [length_is] übergeben werden sollen. Dadurch kann der Server das Array mit mehr Daten füllen, als er empfangen hat, die er dann an den Client zurücksenden kann.

Im Allgemeinen ist es nicht sinnvoll, sowohl [size_is] als auch [length_is] für [ein]- oder [out] -Parameter anzugeben. In beiden Fällen steuert [size_is] die Speicherzuordnung. Ihre Anwendung könnte [size_is] verwenden, um mehr Arrayelemente zuzuweisen, als sie überträgt (wie in [length_is]angegeben). Dies wäre jedoch ineffizient. Es wäre auch ineffizient, identische Werte für [size_is] und [length_is] anzugeben. Da dies während des Parameter marshallings zu zusätzlichem Mehraufwand führen würde. Wenn die Werte von [size_is] und [length_is] immer identisch sind, lassen Sie das [length_is] -Attribut weg.

Beispiele

/* counted string holding at most "size" characters */ 
typedef struct 
{ 
    unsigned short size; 
    unsigned short length; 
    [size_is(size), length_is(length)] char string[*]; 
 } COUNTED_STRING_TYPE; 
 
/* counted string holding at most 80 characters */ 
typedef struct 
{ 
    unsigned short length; 
    [length_is(length)] char string[80]; 
} STATIC_COUNTED_STRING_TYPE; 
 
HRESULT Proc1(
    [in] short iLength; 
    [in, length_is(iLength)] short asNumbers[10]);

Weitere Informationen

Feldattribute

first_is

IDL-Datei (Interface Definition)

last_is

max_is

min_is

size_is

Zeichenfolge