次の方法で共有


配列の変化

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 を 2 回呼び出します。 最初の呼び出しでは、変数 firstArrayElementNumber と totalElementsPassed の値で示されているように、20 から 119 の配列要素を渡します。 2 番目の呼び出しでは、クライアントは 120 から 319 の配列要素を渡します。