不同的陣列

在 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 的陣列元素。