RpcSs 記憶體管理套件
代表應用程式佈建記憶體時,存根和執行時間所使用的預設配置器/解除配置器組midl_user_allocate midl_user_free/ 。 不過,您可以使用 ACF 屬性 [enable_allocate],選擇 RpcSs 套件,而不是預設。 RpcSs 套件是由開頭為 RpcSs 或 RpcSm前置詞的 RPC 函式所組成。 Windows 應用程式不建議使用 RpcSs 套件。
注意
Rpcss 記憶體管理套件已過時。 建議使用 midl_user_allocate 和 midl_user_free 。
在 /osf 模式中,當使用完整指標時、當引數需要記憶體配置時,或使用 [enable_allocate] 屬性,就會自動為 MIDL 產生的存根啟用 RpcSs 套件。 在預設 (Microsoft 擴充) 模式中,只有在使用 [enable_allocate] 屬性時,才會啟用 RpcSs 套件。 [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 函式來明確釋放記憶體。 請注意,這些函式實際上不會釋放記憶體。 他們會將其標示為要刪除。 當您的程式呼叫 RpcSsDisableAllocate 或 RpcSsDisableAllocate時,RPC 程式庫會釋放記憶體。
您也可以藉由呼叫 RpcSmEnableAllocate 常式 (來啟用應用程式的記憶體管理環境,而且您可以藉由呼叫 RpcSmDisableAllocate 常式) 加以停用。 啟用之後,應用程式程式碼就可以從 RpcSs 套件呼叫函式來配置和解除配置記憶體。