Atrybuty tablicy
Istnieje ścisła relacja między tablicami i wskaźnikami w języku C. Po przekazaniu jako parametru do funkcji nazwa tablicy jest traktowana jako wskaźnik do pierwszego elementu tablicy, jak pokazano w poniższym przykładzie:
/* fragment */
extern void f1(char * p1);
void main(void)
{
char chArray[MAXSIZE];
fLocal1(chArray);
}
W wywołaniu lokalnym można użyć parametru wskaźnika do przemaszerowania przez pamięć i zbadać zawartość innych adresów:
/* dump memory (fragment) */
void fLocal1(char * pch1)
{
int i;
for (i = 0; i < MAXSIZE; i++)
printf("%c ", *pch1++);
}
Gdy klient przekazuje wskaźnik do procedury zdalnej, wycink klient przesyła zarówno wskaźnik, jak i dane, do których wskazuje. Chyba że wskaźnik jest ograniczony do odpowiednich danych, wszystkie pamięci klienta muszą być przesyłane z każdym wywołaniem zdalnym. Wymuszając silne wpisywanie w definicji interfejsu, MIDL ogranicza przetwarzanie wycinków klienta do danych odpowiadających określonemu wskaźnikowi.
Rozmiar tablicy i zakres elementów tablicy przesyłanych do komputera zdalnego może być stały lub zmienny. Gdy te wartości są zmienne, a tym samym określone w czasie wykonywania, należy użyć atrybutów w pliku IDL, aby określić liczbę elementów tablicy do przesyłania. Następujące atrybuty MIDL obsługują granice tablicy.
Atrybut | Opis | Domyślny |
---|---|---|
[ first_is] | Indeks pierwszego przesyłanego elementu tablicy. | 0 |
[ last_is] | Indeks ostatniego przesyłanego elementu tablicy. | - |
[ length_is] | Łączna liczba przesyłanych elementów tablicy. | - |
[ max_is] | Najwyższa prawidłowa wartość indeksu tablicy. | - |
[ min_is] | Najniższa prawidłowa wartość indeksu tablicy. | 0 |
[ size_is] | Całkowita liczba elementów tablicy przydzielonych dla tablicy. | - |
Nuta
Atrybut min_is nie jest implementowany w RPC. Minimalny indeks tablicy jest zawsze traktowany jako zero.