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


Соответствующие массивы

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