Zusammenfassung der Speicherzuordnungsregeln

In der folgenden Tabelle sind die wichtigsten Regeln für die Speicherzuweisung zusammengefasst.

MIDL-Element BESCHREIBUNG
[ Ref-Zeiger der obersten ] Ebene Muss Nicht-NULL-Zeiger sein.
Rückgabewert der Funktion Für Zeiger-Rückgabewerte wird immer neuer Arbeitsspeicher zugeordnet.
[unique, out ] oder [ ptr, ] out-Zeiger Von MIDL nicht zulässig.
Eindeutiger Zeiger auf nicht oberster Ebene in , out oder [ ] [ ptrin , out-Zeiger, der von NULL in ] Nicht-NULL geändert wird Clientstubs weisen bei der Rückgabe neuen Arbeitsspeicher auf dem Client zu.
Eindeutiger Zeiger auf nicht [ oberster Ebene in, der von Null in ] NULL geändert wird Der Arbeitsspeicher ist auf dem Client verwaist. Die Clientanwendung ist dafür verantwortlich, Arbeitsspeicher frei zu geben und Lecks zu verhindern.
Nicht-Ptr der obersten Ebene [ in, out-Zeiger, der sich von ] Nicht-NULL in NULL ändert Der Arbeitsspeicher ist auf dem Client verwaist, wenn kein Alias verwendet wird. Die Clientanwendung ist in diesem Fall für die Freistellung und Verhinderung von Speicherverlusten verantwortlich.
[ref ] Zeiger Die Clientanwendungsebene wird in der Regel zuteilen.
Nicht NULL [ in, ] Out-Zeiger Stubs versuchen, in vorhandenen Speicher auf dem Client zu schreiben. Wenn [ Zeichenfolge ] und Größe größer als die auf dem Client zugeordnete Größe sind, verursacht dies bei der Rückgabe einen GP-Fehler.

In der folgenden Tabelle werden die Auswirkungen von Schlüssel-IDL- und ACF-Attributen auf die Speicherverwaltung zusammengefasst.

MIDL-Feature Clientprobleme Serverprobleme
[allocate _ (einzelner Knoten), ] [ allocate(alle _ Knoten)] Bestimmt, ob mindestens ein Aufruf der Speicherfunktionen erfolgt. Identisch mit dem Client, mit der Ausnahme, dass privater Arbeitsspeicher häufig für die Zuordnung (einzelner Knoten) in und _ [ ] [ in,out-Daten verwendet werden ] kann.
[allocate(free) ] oder [ allocate(don't _ free)] (Keine; wirkt sich auf den Server aus.) Bestimmt, ob nach jedem Remoteprozeduraufruf Arbeitsspeicher auf dem Server frei wird.
array attributes [ max is _ and ] size [ _ is] (Keine; wirkt sich auf den Server aus.) Bestimmt die Größe des zu reservierten Arbeitsspeichers.
[ _ Byteanzahl] Der Client muss den Puffer zuordnen. wird nicht von Clientstubs zugeordnet oder frei. Das ACF-Parameterattribut bestimmt die Größe des auf dem Server zugeordneten Puffers.
[ _ "Allocate" aktivieren] In der Regel keine. Der Client verwendet jedoch möglicherweise eine andere Speicherverwaltungsumgebung. Der Server verwendet eine andere Speicherverwaltungsumgebung. RpcSmAllocate sollte für Zuordnungen verwendet werden.
[in ] Attribut Clientanwendung, die für die Zuweisung von Arbeitsspeicher für Daten verantwortlich ist. Wird auf dem Server durch Stubs zugeordnet.
[out ] Attribut Wird auf dem Client durch Stubs zugeordnet. [out ] Der Zeiger "-only" muss [ ein ] Verweiszeiger sein, der auf dem Server durch Stubs zugeordnet wird.
[ref ] Attribut Arbeitsspeicher, auf den vom Zeiger verwiesen wird, muss von der Clientanwendung zugeordnet werden. Verweiszeiger auf oberster und erster Ebene, die von Stubs verwaltet werden.
[unique ] Attribut Nicht NULL bis NULL kann zu verwaisten Arbeitsspeicher führen. Null bis Nicht-NULL bewirkt, dass der Clientstub midl _ aufruft, der dem Benutzer _ zugibt. (Wirkt sich auf den Client aus.)
[ptr ] Attribut (Siehe [ eindeutig ] .) (Siehe [ eindeutig ] .)