Variierende Arrays
In MIDL sind unterschiedliche Arrays in ihrer 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 festgelegt.
Für instance zeigt das folgende Beispiel 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 das MIDL-Attribut [first_is], um die Indexnummer des ersten Elements im Teil des Arrays anzugeben, den 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.