Länge, Größe und direktionale Attribute
Bei der Übergabe von Arrays zwischen client und server wird durch die größenbezogenen Attribute max und size bestimmt, wie viele Arrayelemente vom [ _ ] [ _ ] Serverstub reserviert werden. Die Länge der längenbezogenen Attribute ist , zuerst ist , und zuletzt wird bestimmt, wie viele Elemente sowohl an den Server als auch an den [ _ ] Client übertragen [ _ ] [ _ ] werden.
Auf Parameter können unterschiedliche 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, einem Array und der übertragenen Länge des Arrays angibt. Der Begriff dir _ attr bezieht sich auf das direktionale Attribut, das auf den Parameter angewendet wird:
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 vom Client zum Server | Stubaktionen bei Rückgabe 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 fest ist, ordnen Sie die Arraygröße auf dem Server zu, übertragen aber keine Elemente. Wenn die Arraygröße nicht gebunden ist, nicht legal: 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] | Ordnen Sie Speicherplatz für den Length-Parameter auf dem Server zu, übertragen Sie den Parameter jedoch nicht. Wenn die Arraygröße fest ist, ordnen Sie die Arraygröße auf dem Server zu, übertragen jedoch keine Elemente. Wenn die Arraygröße nicht festgelegt ist, nicht legal: MIDL-Compilerfehler. |
Übertragen Sie die Länge und die Anzahl der Elemente, die durch die von der Serveranwendung festgelegten Länge angegeben werden. |
| [out] | [in, out] | Übertragen Sie den Length-Parameter. Wenn die Arraygröße gebunden ist, ordnen Sie die Arraygröße auf dem Server zu, übertragen aber keine Elemente. Wenn die Arraygröße nicht gebunden ist, nicht legal: 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 serverseitiger Seite nicht ändern. Wenn Sie den Length-Parameter ändern, können Sie verwaisten Arbeitsspeicher verwenden. Weitere Informationen finden Sie unter Verwaister Arbeitsspeicher.