可变数组

在 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 属性 [first_is] 指定客户端传递给服务器的数组部分中第一个元素的索引号。 [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 的数组元素。