Соответствующие массивы
Размер соответствующего массива может изменяться или соответствовать каждый раз, когда клиент передает его удаленной процедуре на сервере. Определение интерфейса в MIDL-файле приложения позволяет клиенту указывать размер массива при каждом вызове удаленной процедуры. Используйте пустые квадратные скобки ([ ]) или звездочку в квадратных скобках ([*]) в определении массива, чтобы указать соответствующий массив.
В следующем примере содержится определение удаленной процедуры в интерфейсе в MIDL-файле. Клиент указывает размер массива, который он передает серверу параметром arraySize.
[
/*Attributes are defined here. */
]
interface MyInterface
{
MyRemoteProc(
long lArraySize,
[size_is(lArraySize)] char achArray[*]
);
/* Other interface procedures are defined here. */
}
Определение интерфейса использует атрибут MIDL [size_is] для указания размера массива, который клиент передает серверу. Если вы предпочитаете указывать максимальное значение номеров индекса массива, используйте вместо него атрибут [max_is] . Дополнительные сведения об этих атрибутах MIDL см. в атрибутах массива.
В следующем фрагменте кода показано, как клиент может вызвать удаленную процедуру, определенную в предыдущем MIDL-файле.
long lArrayLength = 20;
char achCharArray[20], achAnotherCharArray[200];
// Code to store 20 chars in achCharArray goes here.
MyRemoteProc(
lArrayLength ,
achCharArray);
lArrayLength = 200;
// Code to store 200 chars in achAnotherCharArray goes here.
MyRemoteProc(
lArrayLength ,
achAnotherCharArray);
Этот фрагмент вызывает удаленную процедуру MyRemoteProc дважды. При первом вызове он передает массив из 20 элементов. Во втором вызове клиент передает массив из 200 элементов.