可变数组
在 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 的数组元素。