RpcSs 記憶體管理套件

代表應用程式佈建記憶體時,存根和執行時間所使用的預設配置器/解除配置器組midl_user_allocate midl_user_free/ 。 不過,您可以使用 ACF 屬性 [enable_allocate],選擇 RpcSs 套件,而不是預設。 RpcSs 套件是由開頭為 RpcSsRpcSm前置詞的 RPC 函式所組成。 Windows 應用程式不建議使用 RpcSs 套件。

注意

Rpcss 記憶體管理套件已過時。 建議使用 midl_user_allocatemidl_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 */

您的應用程式可以叫用 RpcSsFreeRpcSmFree 函式來明確釋放記憶體。 請注意,這些函式實際上不會釋放記憶體。 他們會將其標示為要刪除。 當您的程式呼叫 RpcSsDisableAllocateRpcSsDisableAllocate時,RPC 程式庫會釋放記憶體。

您也可以藉由呼叫 RpcSmEnableAllocate 常式 (來啟用應用程式的記憶體管理環境,而且您可以藉由呼叫 RpcSmDisableAllocate 常式) 加以停用。 啟用之後,應用程式程式碼就可以從 RpcSs 套件呼叫函式來配置和解除配置記憶體。