Matrici variabili
In MIDL, le matrici variabili sono di dimensioni fisse. Consentono ai client di passare parti diverse di matrici dai client ai server. Le dimensioni della parte della matrice possono variare dalla chiamata alla chiamata. Tuttavia, le dimensioni della matrice complessiva sono fisse.
Nell'esempio seguente, ad esempio, viene illustrata la definizione di una routine remota in un'interfaccia in un file MIDL. La dimensione della matrice passata dal client al server è fissa dalla costante ARRAY_SIZE. L'interfaccia specifica la parte della matrice che il client passa al server nei parametri firstElement e 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. */
}
La definizione dell'interfaccia usa l'attributo MIDL [first_is] per specificare il numero di indice del primo elemento nella parte della matrice che il client passa al server. L'attributo [length_is] specifica il numero totale di elementi della matrice passati dal client. Per altre informazioni su questi attributi MIDL, vedere Attributi di matrice.
Il frammento di codice seguente illustra come un client potrebbe richiamare la procedura remota definita nel file MIDL precedente.
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);
Questo frammento chiama due volte la procedura remota MyRemoteProc. Nella prima chiamata passa gli elementi della matrice numerati da 20 a 119, come indicato dai valori nelle variabili firstArrayElementNumber e totalElementsPassed. Nella seconda chiamata, il client passa gli elementi della matrice numerati da 120 a 319.