Функция 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 при отмене обработки данных в адресное пространство сервера.
- Заглушка клиента вызывает midl_user_allocate при отмене обработки данных с сервера, на который ссылается указатель [out]. Обратите внимание, что для указателей [in], [out] и [unique] заглушки клиента вызываются midl_user_allocate только в том случае, если значение указателя [unique] было null для входных данных и изменений в ненулевое значение во время вызова. Если указатель [unique] не имеет значения NULL во входных данных, заглушка клиента записывает связанные данные в существующую память.
Если midl_user_allocate не удается выделить память, он должен вернуть указатель null.
Функция midl_user_allocate должна возвращать выровненный указатель на 8 байтов.
Например, примеры программ, предоставляемые пакетом SDK для платформы, реализуют midl_user_allocate с точки зрения функции C malloc:
void __RPC_FAR * __RPC_USER midl_user_allocate(size_t cBytes)
{
return((void __RPC_FAR *) malloc(cBytes));
}
Заметка
Если пакет RpcSs включен (например, в результате использования атрибута [ enable_allocate] ), используйте RpcSmAllocate для выделения памяти на стороне сервера. Дополнительные сведения о [enable_allocate], см. в справочнике по MIDL.