Bereichsattribut
Mit dem [range] -Attribut können Sie einen Bereich zulässiger Werte für Argumente oder Felder angeben, deren Werte zur Laufzeit festgelegt werden. Bei Verwendung mit einem Pipetyp gibt das Attribut den zulässigen Bereich für die Anzahl der Elemente in den Pipeblöcken an.
[range(low-val,high-val)] type-specifier declarator
-
Niedrigwert
-
Der niedrigste zulässige Wert, den der Parameter oder das Feld enthalten kann.
-
Hochwert
-
Der höchste zulässige Wert, den der Parameter oder das Feld enthalten kann.
-
Typspezifizierer
-
Ein anderer integraler Typ als hyper oder __int64, ein Typbezeichner für einen integralen Typ, ein Enumerationstyp oder ein Pipetypname.
-
declarator
-
Ein Standard-C-Deklarator, z. B. ein Bezeichner.
Verwenden Sie das [range] -Attribut, um die Bedeutung vertraulicher Parameter oder Felder zu ändern, z. B. derjenigen, die für Größe oder Länge verwendet werden, mit konformen oder variierenden Arrays; oder immer dann, wenn Sie einen Parameter oder Feldwert anhand eines Bereichs gültiger Werte überprüfen möchten. Das Attribut gilt für Parameter der obersten Ebene sowie parameter und Felder auf niedrigerer Ebene. Das Hinzufügen des [range] -Attributs zu einem Typ ändert das Kabelformat nicht und wirkt sich daher nicht auf die Abwärtskompatibilität aus.
Das [range] -Attribut kann auch für konforme Daten wie Puffer oder Arrays mit einem Konformitätsattribute verwendet werden. Der Effekt besteht darin, alle Konformitätsgrößen für die konformen Daten auf den angegebenen Bereich zu beschränken. Wenn es sich bei den konformen Daten um ein mehrdimensionales Array handelt, ist jede Arraydimension auf den angegebenen Bereich beschränkt.
Die Verwendung von [Bereich] für konforme Daten erfordert, dass das Kompilierungsziel â€"target NT60 oder höher ist.
Beachten Sie, dass Sie die Compileroption /robust verwenden müssen, wenn Sie Ihre IDL-Datei kompilieren, um den Stubcode zu generieren, der diese Überprüfungen ausführt. Ohne den / robust-Schalter ignoriert der MIDL-Compiler dieses Attribut.
HRESULT Method1(
[in, range(0,100)] ULONG m,
[in, range(0,100)] ULONG n,
[size_is(m,n)] ULONG **pplong);
void InPipe(
[in, range(0, MAX_CHUNK) LONG_PIPE pipe_date);