Атрибуты массивов

Существует тесная связь между массивами и указателями в языке C. При передаче в качестве параметра функции имя массива обрабатывается как указатель на первый элемент массива, как показано в следующем примере:

/* fragment */
extern void f1(char * p1);

void main(void)
{
    char chArray[MAXSIZE];

    fLocal1(chArray);
}

В локальном вызове можно использовать параметр указателя для прохода по памяти и просмотра содержимого других адресов:

/* dump memory (fragment) */
void fLocal1(char * pch1)
{
    int i;

    for (i = 0; i < MAXSIZE; i++)
       printf("%c ", *pch1++);
}

Когда клиент передает указатель на удаленную процедуру, заглушка клиента передает указатель и данные, на которые он указывает. Если указатель не ограничен соответствующими данными, вся память клиента должна передаваться при каждом удаленном вызове. Применяя строгий ввод в определении интерфейса, MIDL ограничивает обработку заглушки клиента данными, соответствующими указанному указателю.

Размер массива и диапазон элементов массива, передаваемых на удаленный компьютер, могут быть постоянными или переменными. Если эти значения являются переменными и определяются во время выполнения, необходимо использовать атрибуты в IDL-файле, чтобы указать количество передаваемых элементов массива. Следующие атрибуты MIDL поддерживают границы массива.

attribute Описание По умолчанию
[ first_is] Индекс первого переданного элемента массива. 0
[ last_is] Индекс последнего переданного элемента массива. -
[ length_is] Общее количество переданных элементов массива. -
[ max_is] Наибольшее допустимое значение индекса массива. -
[ min_is] Наименьшее допустимое значение индекса массива. 0
[ size_is] Общее количество элементов массива, выделенных для массива. -

 

Примечание

Атрибут min_is не реализован в RPC. Минимальный индекс массива всегда обрабатывается как нуль.