改变数组

在 MIDL 中,不同数组的大小是固定的。 它们允许客户端将数组的不同部分从客户端传递到服务器。 数组部分的大小可能因调用而异。 但是,整个数组的大小是固定的。

例如,以下示例演示 MIDL 文件中接口中远程过程的定义。 客户端传递给服务器的数组的大小由常量 ARRAY _ SIZE 固定。 接口指定客户端在 firstElement 和 chunkSize 参数中传递给服务器的数组部分。

[
    /*Attributes are defined here. */
]
interface MyInterface
{
    const long ARRAY_SIZE = 1000;

    MyRemoteProc(
        [in] long lFirstElement,
        [in] long lChunkSize,
        [in, first_is(lFirstElement), 
          length_is(lChunkSize)] char achArray[ARRAY_SIZE]
    );

    /* Other interface procedures are defined here. */
}

接口定义首先使用 MIDL 属性指定客户端传递给服务器的数组部分中第一个元素的 [ _ ] 索引号。 [ length _ is ] 属性指定客户端传递的数组元素的总数。 有关这些 MIDL 属性的信息,请参阅 数组属性

下面的代码片段说明了客户端如何调用前面 MIDL 文件中定义的远程过程。

long lFirstArrayElementNumber = 20;
long lTotalElementsPassed = 100;
char achCharArray[ARRAY_SIZE];

// Code to store chars in the array goes here.

MyRemoteProc(
    lFirstArrayElementNumber ,
    lTotalElementsPassed , 
    achCharArray);

firstArrayElementNumber = 120;
totalElementsPassed = 200;

MyRemoteProc(
    lFirstArrayElementNumber ,
    lTotalElementsPassed , 
    achCharArray);

此片段调用远程过程 MyRemoteProc 两次。 第一次调用时,它会传递编号为 20 到 119 的数组元素,如变量 firstArrayElementNumber 和 totalElementsPassed 中的值所指示。 第二次调用时,客户端传递编号为 120 到 319 的数组元素。