Freigeben über


Arrayattribute

Es gibt eine enge Beziehung zwischen Arrays und Zeigern in der Sprache C. Wird ein Arrayname als Parameter an eine Funktion übergeben, wird ein Arrayname als Zeiger auf das erste Element des Arrays behandelt, wie im folgenden Beispiel gezeigt:

/* fragment */
extern void f1(char * p1);

void main(void)
{
    char chArray[MAXSIZE];

    fLocal1(chArray);
}

In einem lokalen Aufruf können Sie den Zeigerparameter verwenden, um durch den Speicher zu marschieren und den Inhalt anderer Adressen zu untersuchen:

/* dump memory (fragment) */
void fLocal1(char * pch1)
{
    int i;

    for (i = 0; i < MAXSIZE; i++)
       printf("%c ", *pch1++);
}

Wenn ein Client einen Zeiger an eine Remoteprozedur übergibt, überträgt der Client-Stub sowohl den Zeiger als auch die Daten, auf die er verweist. Sofern der Zeiger nicht auf die entsprechenden Daten beschränkt ist, muss der gesamte Speicher des Clients mit jedem Remoteanruf übertragen werden. Durch Erzwingen starker Typisierung in der Schnittstellendefinition beschränkt MIDL die Client-Stub-Verarbeitung auf die Daten, die dem angegebenen Zeiger entsprechen.

Die Größe des Arrays und der Bereich von Arrayelementen, die an den Remotecomputer übertragen werden, können konstant oder variabel sein. Wenn diese Werte variabel sind und somit zur Laufzeit bestimmt werden, müssen Sie Attribute in der IDL-Datei verwenden, um anzugeben, wie viele Arrayelemente übertragen werden sollen. Die folgenden MIDL-Attribute unterstützen Arraygrenzen.

Attribut Beschreibung Vorgabe
[ first_is] Index des ersten übertragenen Arrayelements. 0
[ last_is] Index des letzten übertragenen Arrayelements. -
[ length_is] Die Gesamtzahl der übertragenen Arrayelemente. -
[ max_is] Höchster gültiger Arrayindexwert. -
[ min_is] Niedrigster gültiger Arrayindexwert. 0
[ size_is] Die Gesamtanzahl der Arrayelemente, die dem Array zugeordnet sind. -

 

Anmerkung

Das attribut min_is ist in RPC nicht implementiert. Der Minimale Arrayindex wird immer als Null behandelt.