Zuordnen des Attributs erzwingen _

Die [ ACF-Attributerzwingungszuordnung _ ] erzwingt, dass ein Zeigerparameter mithilfe von midl _ user _ allocate zugeordnet wird, anstatt die Zuordnung zu optimieren.

[ [function-attribute-list <>] ] type-specifier <> [pointer- <>declarator <>] function-name <>( [ force_allocate [ , parameter-attribute-list <> ] ] type-specifier <> [declarator <>] , ...);

Parameter

Dieses Attribut verfügt über keine Parameter.

Bemerkungen

RPC versucht, Speicherbelegungen auf dem Server zu minimieren, indem Zeiger auf interne Speicherpuffer bereitgestellt werden. Dieser Ansatz kann Probleme für Anwendungen verursachen, die versuchen, midl _ user _ free direkt auf RPC-bereitgestellten Zeigern aufzurufen, da ein optimierter Zeiger nicht freigegeben werden kann. Das Markieren eines Parameters mit [ "Force _ Allocate" ] verhindert diese Optimierung für alle Zeiger, die ihn ableiten.

Eine weitere häufige Verwendung von [ Force _ Allocate ] besteht darin, die Ausrichtung des Arbeitsspeichers zu gewährleisten, auf den gezeigt wird, wenn eine Anwendung eine Ausrichtung erfordert, die größer als die des Arbeitsspeichers ist, auf den gezeigt wird. Beispielsweise übergeben Anwendungen Daten häufig in einem generischen Bytearray, anstatt den tatsächlichen Typ zu verwenden. Es ist jedoch garantiert, dass ein Byte nur bei 1 ausgerichtet wird. Dies kann zu Problemen bei Anwendungen führen, die eine größere Ausrichtung voraussetzen. Durch Markieren des Parameters mit [ force _ allocate ] kann die Anwendung sicherstellen, dass der gesamte Arbeitsspeicher, auf den gezeigt wird, eine Ausrichtung aufweist, die der durch die mittlere _ _ Benutzerzuweisunggarantierten entspricht.

Beispiele

/* IDL file */
void Func1([in, out, string] char **ppstr);
void Func2([in] long s, [in, size_is(s)] byte *pData);

/* ACF file */

/* e.g. The application wishes to call midl_user_free on *ppstr and supply a new pointer */
Func1([force_allocate] pstr);

/* e.g. pData really points to a structure that needs an alignment greater than 1 */
Func2([force_allocate] pData);

Weitere Informationen

Vermeiden des Ausblendens von Informationen

Entwerfen von 64-Bit-kompatiblen Schnittstellen

midl _ user _ allocate

midl _ user _ free

allocate