Freigeben über


Länge, Größe und Direktionale Attribute

Bei der Übergabe von Arrays zwischen Client und Server bestimmen die größenbezogenen Attribute [max_is] und [size_is], wie viele Arrayelemente der Serverstub zuordnet. Die längenbezogenen Attribute [length_is], [first_is] und [last_is] bestimmen, wie viele Elemente an den Server und den Client übertragen werden.

Auf Parameter können verschiedene direktionale Attribute angewendet werden. Einige Kombinationen von direktionalen Attributen können jedoch Fehler verursachen. Angenommen, Sie schreiben eine Schnittstelle, die eine Prozedur mit zwei Parametern angibt: ein Array und die übertragene Länge des Arrays. Der Begriff dir_attr bezieht sich auf das richtungsgerichtete Attribut, das auf den Parameter angewendet wird, wie:

Proc1(
    [dir_attr] short *plength;
    [dir_attr, length_is(pLength)] short array[MAX_SIZE]);

Das MIDL-Compilerverhalten für jede Kombination von direktionalen Attributen wird in der folgenden Tabelle beschrieben.

Array Length-Parameter Stubaktionen während des Aufrufs von Client an Server Stubaktionen bei der Rückkehr vom Server zum Client
[in] [in] Übertragen Sie die Länge und die Anzahl der elemente, die durch den -Parameter angegeben werden. Es werden keine Daten übertragen.
[in] [out] Nicht legal; MIDL-Compilerfehler. Nicht legal; MIDL-Compilerfehler.
[in] [in, out] Übertragen Sie die Länge und die Anzahl der elemente, die durch den length-Parameter angegeben werden. Übertragen Sie nur die Länge.
[out] [in] Übertragen Sie die Länge.
Wenn die Arraygröße festgelegt ist, ordnen Sie die Arraygröße auf dem Server zu, übertragen jedoch keine Elemente.
Wenn die Arraygröße nicht gebunden ist, nicht zulässig: MIDL-Compilerfehler.
Übertragen Sie die Anzahl der Elemente, die durch die Länge angegeben werden.
Beachten Sie, dass die Länge geändert werden kann und einen anderen Wert als der Wert auf dem Client haben kann. Übertragen Sie die Länge nicht.
[out] [out] Weisen Sie Speicherplatz für den length-Parameter auf dem Server zu, übertragen Sie den Parameter jedoch nicht. Wenn die Arraygröße festgelegt ist, ordnen Sie die Arraygröße auf dem Server zu, übertragen sie jedoch keine Elemente.
Wenn die Arraygröße nicht behoben ist, nicht zulässig: MIDL-Compilerfehler.
Übertragen Sie die Länge und die Anzahl der Elemente, die durch die von der Serveranwendung festgelegte Länge angegeben werden.
[out] [in, out] Übertragen Sie den Längenparameter. Wenn die Arraygröße gebunden ist, ordnen Sie die Arraygröße auf dem Server zu, übertragen jedoch keine Elemente.
Wenn die Arraygröße nicht gebunden ist, nicht zulässig: MIDL-Compilerfehler.
Übertragen Sie die Länge. Übertragen Sie die Anzahl der Arrayelemente, die durch die Länge angegeben werden.
[in, out] [in] Übertragen Sie die Länge und die Anzahl der elemente, die durch den -Parameter angegeben werden. Übertragen Sie die Länge nicht. Übertragen Sie die Anzahl der Elemente, die durch die Länge angegeben werden.
Beachten Sie, dass die Länge geändert werden kann und einen anderen Wert als der ursprüngliche Wert auf dem Client haben kann.
[in, out] [out] Nicht legal; MIDL-Compilerfehler. Nicht legal; MIDL-Compilerfehler.
[in, out] [in, out] Übertragen Sie die Länge und die Anzahl der elemente, die durch den -Parameter angegeben werden. Übertragen Sie die Länge und die Anzahl der elemente, die durch den -Parameter angegeben werden.

Im Allgemeinen sollten Sie die Längen- oder Größenparameter auf der Serverseite nicht ändern. Wenn Sie den Längenparameter ändern, können Sie Arbeitsspeicher verwaist. Weitere Informationen finden Sie unter Speicherwaisen.