Verschiedene Arrays

In MIDL werden 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 Gesamtarrays ist jedoch behoben.

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 behoben. Die Schnittstelle gibt den Teil des Arrays an, den der Client in den Parametern firstElement und chunkSize an den Server übergeben.

[
    /*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 das MIDL-Attribut [first_is] zum Angeben der Indexnummer des ersten Elements im Teil des Arrays, das der Client an den Server übergeben wird. Das Attribut [length_is] gibt die Gesamtzahl der Arrayelemente an, die der Client übergeben wird. Weitere Informationen zu diesen MIDL-Attributen finden Sie unter Arrayattribute.

Das folgende Codefragment veranschaulicht, wie ein Client die remoteprozedur aufrufen kann, die in der vorherigen MIDL-Datei definiert ist.

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. Auf dem ersten Aufruf übergibt er die Arrayelemente, die 20 bis 119 nummeriert wurden, wie durch die Werte in den Variablen firstArrayElementNumber und totalElementsPassed angegeben. Auf dem zweiten Aufruf übergibt der Client die Arrayelemente, die 120 bis 319 nummeriert wurden.