range (atributo)
El atributo [range] permite especificar un intervalo de valores permitidos para argumentos o campos cuyos valores se establecen en tiempo de ejecución. Cuando se usa con un tipo de canalización, el atributo especifica el intervalo permitido para el recuento de elementos de los fragmentos de canalización.
[range(low-val,high-val)] type-specifier declarator
-
low-val
-
Valor permitido más bajo que puede contener el parámetro o el campo.
-
high-val
-
Valor permitido más alto que el parámetro o campo puede contener.
-
type-specifier
-
Un tipo entero distinto de hyper o __int64, un identificador de tipo para un tipo entero, un tipo de enumeración o un nombre de tipo de canalización.
-
declarator
-
Un declarador C estándar, como un identificador.
Utilice el atributo [range] para modificar el significado de parámetros o campos confidenciales, como los usados para el tamaño o la longitud, con matrices conformes o variables; o siempre que desee comprobar un parámetro o valor de campo en un intervalo de valores válidos. El atributo es aplicable a los parámetros de nivel superior, así como a los parámetros y campos de nivel inferior. Agregar el atributo [range] a un tipo no cambia su formato de conexión, por lo que no afecta a la compatibilidad con versiones anteriores.
El atributo [range] también se puede usar en datos conformes, como búferes o matrices con un atributo de conformidad. El efecto es limitar todos los tamaños de conformidad de los datos conformes al intervalo especificado. Si los datos conformes son una matriz multidimensional, cada dimensión de matriz se limita al intervalo especificado.
El uso de [range] en datos conformes requiere que el destino de compilación sea NT60 de destino o superior.
Tenga en cuenta que debe usar la opción del compilador /robust al compilar el archivo IDL para generar el código auxiliar que realizará estas comprobaciones. Sin el modificador /robust , el compilador MIDL omite este atributo.
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);