Variierende Arrays

In MIDL sind unterschiedliche Arrays in der Größe festgelegt. Sie ermöglichen Es Clients, verschiedene Teile von Arrays von Clients an Server zu übergeben. Die Größe des Arrayteils kann von Aufruf zu Aufruf variieren. Die Größe des gesamten Arrays ist jedoch festgelegt.

Das folgende Beispiel zeigt beispielsweise die Definition einer Remoteprozedur in einer Schnittstelle in einer MIDL-Datei. Die Größe des Arrays, das der Client an den Server übergibt, wird durch die Konstante ARRAY _ SIZE festgelegt. Die -Schnittstelle gibt den Teil des Arrays an, den der Client in den Parametern firstElement und chunkSize an den Server übergibt.

[
    /*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. */
}

Die Schnittstellendefinition verwendet zuerst das MIDL-Attribut, [ _ um ] die Indexnummer des ersten Elements im Teil des Arrays anzugeben, das der Client an den Server übergibt. Das [ length _ is-Attribut ] gibt die Gesamtzahl der Arrayelemente an, die der Client übergibt. Weitere Informationen zu diesen MIDL-Attributen finden Sie unter Arrayattribute.

Das folgende Codefragment veranschaulicht, wie ein Client die in der vorherigen MIDL-Datei definierte Remoteprozedur aufrufen kann.

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);

Dieses Fragment ruft die Remoteprozedur MyRemoteProc zweimal auf. Beim ersten Aufruf werden die Arrayelemente mit der Nummer 20 bis 119 übergeben, wie durch die Werte in den Variablen firstArrayElementNumber und totalElementsPassed angegeben. Beim zweiten Aufruf übergibt der Client die Arrayelemente mit der Nummer 120 bis 319.