force_allocate 属性

ACF 属性 [force_allocate] 强制使用 midl_user_allocate 而不是优化分配来分配指针参数。

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

参数

此特性没有参数。

备注

RPC 尝试通过提供指向内部内存缓冲区的指针来最大程度地减少服务器上的内存分配。 此方法可能会导致尝试在 RPC 提供的指针上直接调用 midl_user_free 的应用程序出现问题,因为无法释放已优化的指针。 使用 [force_allocate] 标记参数将阻止对派生它的所有指针进行这种优化。

[force_allocate] 的另一个常见用途是,如果应用程序要求对齐大于指向的内存的对齐方式,则保证所指向的内存的对齐方式。 例如,应用程序通常以泛型字节数组而不是使用实际类型传递数据,但只能保证字节在 1 处对齐,这可能会导致假定较大对齐的应用程序出现问题。 通过使用 [force_allocate] 标记参数,应用程序可以保证指向的所有内存的对齐方式与 midl_user_allocate保证的对齐方式相同。

示例

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

另请参阅

避免隐藏信息

设计 64 位兼容接口

midl_user_allocate

midl_user_free

分配