atributo de intervalo
O atributo [range] permite que você especifique um intervalo de valores permitidos para argumentos ou campos cujos valores são definidos em tempo de execução. Quando usado com um tipo de pipe, o atributo especifica o intervalo permitido para a contagem de elementos nas partes de pipe.
[range(low-val,high-val)] type-specifier declarator
Parâmetros
-
low-val
-
O menor valor permitido que o parâmetro ou campo pode conter.
-
high-val
-
O valor permitido mais alto que o parâmetro ou campo pode conter.
-
type-specifier
-
Um tipo integral diferente de hyper ou __int64, um identificador de tipo para um tipo integral, um tipo de enumeração ou um nome de tipo de pipe.
-
declarator
-
Um declarador C padrão, como um identificador.
Comentários
Use o atributo [range] para modificar o significado de parâmetros ou campos confidenciais, como aqueles usados para tamanho ou comprimento, com matrizes em conformidade ou variáveis; ou sempre que você quiser marcar um parâmetro ou valor de campo em relação a um intervalo de valores válidos. O atributo é aplicável a parâmetros de nível superior, bem como a parâmetros e campos de nível inferior. Adicionar o atributo [range] a um tipo não altera seu formato de fio, portanto, não afeta a compatibilidade com versões anteriores.
O atributo [range] também pode ser usado em dados em conformidade, como buffers ou matrizes com um atributo de conformidade. O efeito é limitar todos os tamanhos de conformidade dos dados em conformidade ao intervalo especificado. Se os dados em conformidade forem uma matriz multidimensional, cada dimensão de matriz será limitada ao intervalo especificado.
O uso de [intervalo] em dados em conformidade requer que o destino de compilação seja NT60 de destino ou superior.
Observe que você deve usar a opção do compilador /robust ao compilar o arquivo IDL para gerar o código stub que executará essas verificações. Sem a opção /robust , o compilador MIDL ignora esse atributo.
Exemplos
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);
Confira também