Функция 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 и во время вызова изменилось на значение, отличное от NULL. Если на входных данных указатель [unique] не был равен NULL, заглушка клиента записывает связанные данные в существующую память.
Если midl_user_allocate не удается выделить память, он должен вернуть пустой указатель.
Функция 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.