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


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

Существует тесная связь между массивами и указателями на языке 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 поддерживают границы массива.

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

 

Заметка

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