Прочитать на английском

Поделиться через


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);

См. также раздел

Файл определения интерфейса (IDL)

массивах

first_is

last_is

length_is

max_is

/Надежные

size_is

switch_is