Attributi di matrice
Esiste una relazione stretta tra matrici e puntatori nel linguaggio C. Quando viene passato come parametro a una funzione, un nome di matrice viene considerato come puntatore al primo elemento della matrice, come illustrato nell'esempio seguente:
/* fragment */
extern void f1(char * p1);
void main(void)
{
char chArray[MAXSIZE];
fLocal1(chArray);
}
In una chiamata locale è possibile usare il parametro puntatore per passare attraverso la memoria ed esaminare il contenuto di altri indirizzi:
/* dump memory (fragment) */
void fLocal1(char * pch1)
{
int i;
for (i = 0; i < MAXSIZE; i++)
printf("%c ", *pch1++);
}
Quando un client passa un puntatore a una routine remota, lo stub client trasmette sia il puntatore che i dati a cui punta. A meno che il puntatore non sia limitato ai dati corrispondenti, tutta la memoria del client deve essere trasmessa con ogni chiamata remota. Applicando la digitazione avanzata nella definizione dell'interfaccia, MIDL limita l'elaborazione dello stub client ai dati che corrispondono al puntatore specificato.
Le dimensioni della matrice e l'intervallo di elementi di matrice trasmessi al computer remoto possono essere costanti o variabili. Quando questi valori sono variabili e quindi determinati in fase di esecuzione, è necessario usare gli attributi nel file IDL per specificare il numero di elementi della matrice da trasmettere. Gli attributi MIDL seguenti supportano i limiti di matrice.
Attributo | Descrizione | Predefinito |
---|---|---|
[ first_is] | Indice del primo elemento di matrice trasmesso. | 0 |
[ last_is] | Indice dell'ultimo elemento di matrice trasmesso. | - |
[ length_is] | Numero totale di elementi di matrice trasmessi. | - |
[ max_is] | Valore di indice di matrice valido più alto. | - |
[ min_is] | Valore di indice matrice valido più basso. | 0 |
[ size_is] | Numero totale di elementi di matrice allocati per la matrice. | - |
Nota
L'attributo min_is non è implementato in RPC. L'indice di matrice minimo viene sempre considerato zero.