Udostępnij za pośrednictwem


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.