Freigeben über


force_allocate-Attribut

Das ACF-Attribut [force_allocate] 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 hat keine Parameter.

Bemerkungen

RPC versucht, die Speicherbelegungen auf dem Server zu minimieren, indem Zeiger auf interne Speicherpuffer bereitgestellt werden. Dieser Ansatz kann Probleme bei Anwendungen verursachen, die versuchen, midl_user_free direkt auf rpc-bereitgestellten Zeigern aufzurufen, da ein optimierter Zeiger nicht freigegeben werden kann. Wenn Sie einen Parameter mit [force_allocate] markieren, wird diese Optimierung für alle zeiger verhindert, die ihn ableiten.

Eine weitere häufige Verwendung von [force_allocate] besteht darin, die Ausrichtung des Speichers zu gewährleisten, auf den verwiesen wird, wenn eine Anwendung eine Ausrichtung erfordert, die größer als die des Speichers ist, auf den verwiesen wird. Beispielsweise übergeben Anwendungen Daten häufig in einem generischen Bytearray, anstatt den tatsächlichen Typ zu verwenden, aber ein Byte wird garantiert nur an 1 ausgerichtet, was zu Problemen bei Anwendungen führen kann, die von einer größeren Ausrichtung ausgehen. Indem der Parameter mit [force_allocate] markiert wird, kann die Anwendung sicherstellen, dass der gesamte Speicher, auf den verwiesen wird, eine Ausrichtung aufweist, die der durch midl_user_allocate garantierten 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

Zuordnen