Пакет управления памятью RpcSs
Пара распределителя или сделки по умолчанию, используемая заглушками и временем выполнения при выделении памяти от имени приложения, midl_user_allocate/midl_user_free. Однако вместо пакета RpcSs можно выбрать пакет по умолчанию с помощью атрибута ACF [enable_allocate]. Пакет RpcSs состоит из функций RPC, которые начинаются с префикса RpcSs или RpcSm. Пакет RpcSs не рекомендуется для приложений Windows.
Заметка
Пакет управления памятью Rpcss устарел. Рекомендуется использовать midl_user_allocate и midl_user_free.
В режиме /osf пакет RpcSs включается для заглушки, созданные MIDL, автоматически при использовании полных указателей, когда аргументы требуют выделения памяти или в результате использования атрибута [enable_allocate]. В режиме по умолчанию (microsoft extended) пакет RpcSs включен только в том случае, если используется атрибут [enable_allocate]. Атрибут [enable_allocate] включает среду RpcSs с помощью заглушки на стороне сервера. Клиентская сторона становится оповещена о возможности включения пакета RpcSs. В режиме /osf стороне клиента не затрагивается.
Если пакет RpcSs включен, выделение памяти на стороне сервера выполняется с помощью частной пары управления памятью RpcSs и сделки. Вы можете выделить память с помощью того же механизма, вызвав RpcSmAllocate (или RpcSsAllocate). При возвращении из заглушки сервера все памяти, выделенные пакетом RpcSs, автоматически освобождаются. В следующем примере показано, как включить пакет RpcSs:
/* ACF file fragment */
[
implicit_handle(handle_t GlobalHandle),
enable_allocate
]
interface iface
{
}
/*Server management routine fragment. Replaces p=midl_user_allocate(size); */
p=RpcSsAllocate(size); /*raises exception */
p=RpcSmAllocate(size, &status); /*returns error code */
Приложение может явно освободить память, вызвав функцию RpcSsFree или RpcSmFree. Обратите внимание, что эти функции фактически не освобождают память. Они помечают его для удаления. Библиотека RPC освобождает память, когда программа вызывает RpcSsDisableAllocate или RpcSsDisableAllocate.
Вы также можете включить среду управления памятью для приложения, вызвав подпрограмму RpcSmEnableAllocate (и вы можете отключить ее, вызвав подпрограмму RpcSmDisableAllocate). После включения код приложения может выделить и освободить память путем вызова функций из пакета RpcSs.