共用方式為


CoReleaseMarshalData 函式 (combaseapi.h)

終結先前封送處理的數據封包。

語法

HRESULT CoReleaseMarshalData(
  [in] LPSTREAM pStm
);

參數

[in] pStm

數據流的指標,其中包含要終結的數據封包。 請參閱 IStream

傳回值

此函式可以傳回標準傳回值E_FAIL、E_INVALIDARG、E_OUTOFMEMORY和E_UNEXPECTED,以及下列值。

傳回碼 描述
S_OK
數據封包已成功終結。
STG_E_INVALIDPOINTER
pStm 參數相關的錯誤。
CO_E_NOTINITIALIZED
呼叫此函式之前,目前線程上未呼叫 CoInitializeOleInitialize 函式。

備註

重要  

安全性注意事項:使用不受信任的數據呼叫此方法是安全性風險。 呼叫此方法時,請一律使用信任的資料。

 
CoReleaseMarshalData 函式會執行下列工作:
  1. 函式會從數據流讀取CLSID。
  2. 如果使用 COM 的預設封送處理實作,函式會取得標準 unmarshaler 實例的 IMarshal 指標。 如果使用自定義封送處理,函式會呼叫 CoCreateInstance 函式、傳遞它從數據流讀取的CLSID,以及要求新建立 Proxy的 IMarshal 介面指標來建立 Proxy。
  3. 使用它取得的 IMarshal 介面指標,函式會呼叫 IMarshal::ReleaseMarshalData
您通常不會呼叫此函式。 唯一需要呼叫此函式的情況是,如果您使用自定義封送處理 (寫入,並使用您自己的 IMarshal 實作) 。 應呼叫 CoReleaseMarshalData 的範例包括下列情況:
  • 嘗試取消封包的封包,但失敗。
  • 封送處理的數據封包已從全域數據表中移除。
做為比喻,數據封包可以視為原始對象的參考,就像是物件上保留的另一個介面指標一樣。 如同真正的介面指標,該數據封包必須在某個時間點釋放。 使用 IMarshal::ReleaseMarshalData 來釋放數據封包,類似於使用 IUnknown::Release 來釋放介面指標。

請注意,在成功呼叫 CoUnmarshalInterface 函式之後,您不需要呼叫 CoReleaseMarshalData;該函式會在處理時釋放封送處理數據。

重要您必須在呼叫 CoMarshalInterface 的相同 Apartment 中呼叫 CoReleaseMarshalData 函式,才能將物件封送處理至數據流。 如果無法這樣做,可能會導致數據流中封送處理封包所保留的對象參考遭到外洩。
 

規格需求

需求
最低支援的用戶端 Windows 2000 專業版 [傳統型應用程式 |UWP 應用程式]
最低支援的伺服器 Windows 2000 Server [傳統型應用程式 |UWP 應用程式]
目標平台 Windows
標頭 combaseapi.h (包含 Objbase.h)
程式庫 Ole32.lib
Dll Ole32.dll

另請參閱

IMarshal::ReleaseMarshalData