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] 指针,仅当 [unique] 指针值在输入时为 null 并在调用期间更改为非 null 值时,客户端存根才会调用 midl_user_allocate 。 如果 [unique] 指针在输入时为非 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 参考