midl_user_allocate函数
midl_user_allocate 函数是 RPC 应用程序的开发人员必须提供的过程。 它为 RPC 存根和库例程分配内存。 midl_user_allocate 函数必须与以下原型匹配:
void __RPC_FAR * __RPC_USER midl_user_allocate (size_t cBytes);
cBytes 参数指定要分配的字节数。 客户端应用程序和服务器应用程序都必须实现 midl_user_allocate 函数,除非在 OSF 兼容性(/osf)模式下编译。 应用程序和生成的存根调用 midl_user_allocate 直接或间接管理分配的对象。 例如:
- 客户端和服务器应用程序调用 midl_user_allocate 为应用程序分配内存,例如在树或链接列表中创建新节点时。
- 将数据取消合并到服务器地址空间时,服务器存根会调用 midl_user_allocate。
- 客户端存根在从 [out] 指针引用的服务器取消划界数据时 midl_user_allocate 调用。 请注意,对于 [in]、[out] 和 [unique] 指针,客户端存根调用 midl_user_allocate 仅在输入时为 null,并在调用期间更改为非 null 值。 如果输入时 [唯一] 指针为非 null,则客户端存根会将关联的数据写入现有内存中。
如果 midl_user_allocate 无法分配内存,它应返回 null 指针。
midl_user_allocate 函数应返回一个 8 字节对齐的指针。
例如,平台软件开发工具包(SDK)提供的示例程序在 c 函数 malloc中实现 midl_user_allocate:
void __RPC_FAR * __RPC_USER midl_user_allocate(size_t cBytes)
{
return((void __RPC_FAR *) malloc(cBytes));
}
注意
如果已启用 RpcSs 包(例如,使用 [enable_allocate] 属性的结果),请使用 RpcSmAllocate 在服务器端分配内存。 有关 [enable_allocate]的其他信息,请参阅 MIDL 参考。