次の方法で共有


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 Professional [デスクトップ アプリ |UWP アプリ]
サポートされている最小のサーバー Windows 2000 Server [デスクトップ アプリ |UWP アプリ]
対象プラットフォーム Windows
ヘッダー combaseapi.h (Objbase.h を含む)
Library Ole32.lib
[DLL] Ole32.dll

こちらもご覧ください

IAdviseSink::OnClose

IMarshal::D isconnectObject

IOleObject::Close