attributo force_allocate

L'attributo ACF [force_allocate] forza l'allocazione di un parametro puntatore usando midl_user_allocate anziché ottimizzare l'allocazione.

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

Parametri

Questo attributo non ha parametri.

Commenti

RPC tenta di ridurre al minimo le allocazioni di memoria nel server fornendo puntatori ai buffer di memoria interni. Questo approccio può causare problemi per le applicazioni che tentano di chiamare direttamente midl_user_free nei puntatori forniti da RPC, perché non è possibile liberare un puntatore ottimizzato. Contrassegnare un parametro con [force_allocate] impedisce questa ottimizzazione per tutti i puntatori derivati.

Un altro uso comune per [force_allocate] è garantire l'allineamento della memoria a cui punta se un'applicazione richiede un allineamento maggiore di quello della memoria a cui punta. Ad esempio, le applicazioni passano spesso dati in una matrice generica di byte anziché usare il tipo effettivo, ma un byte è garantito solo allineato a 1, che può causare problemi per le applicazioni che presuppongono un allineamento più grande. Contrassegnando il parametro con [force_allocate], l'applicazione può garantire che tutti i punti di memoria abbiano un allineamento uguale a quello garantito da midl_user_allocate.

Esempi

/* 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);

Vedere anche

Evitare informazioni nascoste

Progettazione di interfacce compatibili a 64 bit

midl_user_allocate

midl_user_free

Allocare