range - атрибут
Атрибут [range] позволяет указать диапазон допустимых значений для аргументов или полей, значения которых задаются во время выполнения. При использовании с типом канала атрибут задает допустимый диапазон для количества элементов в блоках канала.
[range(low-val,high-val)] type-specifier declarator
-
low-val
-
Наименьшее допустимое значение, которое может содержать параметр или поле.
-
high-val
-
Максимально допустимое значение, которое может содержать параметр или поле.
-
type-specifier
-
Целочисленный тип, отличный от hyper или __int64, идентификатор целочисленного типа, тип перечисления или имя типа канала.
-
declarator
-
Стандартный декларатор C, например идентификатор.
Используйте атрибут [range], чтобы изменить значение конфиденциальных параметров или полей, например тех, которые используются для размера или длины, с соответствующими или изменяющимся массивами; или всякий раз, когда требуется проверка значение параметра или поля в диапазоне допустимых значений. Атрибут применим к параметрам верхнего уровня, а также к параметрам и полям нижнего уровня. Добавление атрибута [range] к типу не изменяет его формат провода, поэтому не влияет на обратную совместимость.
Атрибут [range] также можно использовать для соответствующих данных, таких как буферы или массивы с атрибутом соответствия. Результатом является ограничение всех размеров соответствия для соответствующих данных указанным диапазоном. Если соответствующие данные являются многомерным массивом, каждое измерение массива ограничено указанным диапазоном.
Использование [диапазона] для соответствующих данных требует, чтобы целевой объект компиляции был целевым объектом NT60 или выше.
Обратите внимание, что при компиляции IDL-файла необходимо использовать параметр компилятора /robust , чтобы создать код заглушки, который будет выполнять эти проверки. Без параметра /robust компилятор MIDL игнорирует этот атрибут.
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);