Freigeben über


Arrayattribute

Es besteht eine enge Beziehung zwischen Arrays und Zeigern in der Sprache C. Wenn ein Arrayname als Parameter an eine Funktion übergeben wird, wird ein Arrayname wie ein 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 den Speicher zu durchlaufen 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 Clientstub 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 Arbeitsspeicher des Clients bei jedem Remoteaufruf übertragen werden. Durch Erzwingen einer starken Eingabe in der Schnittstellendefinition schränkt MIDL die Client-Stubverarbeitung auf die Daten ein, die dem angegebenen Zeiger entsprechen.

Die Größe des Arrays und der Bereich der Arrayelemente, die an den Remotecomputer übertragen werden, können konstant oder variabel sein. Wenn diese Werte variabel sind und daher 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.

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

 

Hinweis

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