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