CoDisconnectObject 函式 (combaseapi.h)

中斷代表指向指定物件之所有介面指標維護的所有遠端進程連接。

只有實際管理對象的進程應該呼叫 CoDisconnectObject

語法

HRESULT CoDisconnectObject(
  [in] LPUNKNOWN pUnk,
  [in] DWORD     dwReserved
);

參數

[in] pUnk

要中斷連線之物件上任何衍生自 IUnknown 之介面的指標。

[in] dwReserved

此參數是保留的,而且必須是 0。

傳回值

此函式會傳回S_OK,指出已成功刪除所有遠端進程的連線。

備註

CoDisconnectObject 函式可讓伺服器正確地將所有外部用戶端與 pUnk 所指定的物件中斷連線。

其會執行下列工作:

  1. 檢查是否要中斷連線的物件會實作 IMarshal 介面。 如果是,它會取得該介面的指標;如果沒有,則會取得標準封送處理器 (的指標,也就是 COM 的 IMarshal 實作) 。
  2. 使用它取得的 IMarshal 介面指標,函式接著會呼叫 IMarshal::D isconnectObject ,以中斷所有跨進程用戶端的連線。
物件的用戶端不會呼叫 CoDisconnectObject ,將本身與伺服器中斷連線, (客戶端應該針對此目的使用 IUnknown::Release 作為此用途) 。 相反地,OLE 伺服器會呼叫 CoDisconnectObject 來強制中斷物件的用戶端,通常是為了回應關閉伺服器應用程式的使用者。

同樣地,支援其內嵌物件外部連結的 OLE 容器可以呼叫 CoDisconnectObject 來終結這些連結。 同樣地,此呼叫通常會回應關閉應用程式的使用者。 容器應該先針對其所有 OLE 物件呼叫 IOleObject::Close ,每個物件都應該將 IAdviseSink::OnClose 通知傳送給其各種用戶端。 然後容器可以呼叫 CoDisconnectObject 來關閉任何現有的連線。

CoDisconnectObject 不一定會立即中斷跨進程用戶端的連線。 如果伺服器物件上有任何封送處理呼叫擱置中, CoDisconnectObject 只會在這些呼叫傳回時中斷物件連線。 同時, CoDisconnectObject 會設定旗標,讓任何新的封送處理呼叫傳回CO_E_OBJNOTCONNECTED。

規格需求

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

另請參閱

IAdviseSink::OnClose

IMarshal::D isconnectObject

IOleObject::Close