IExternalConnection インターフェイス (objidl.h)
マーシャリングされた接続または外部接続のサーバー オブジェクトの数を管理します。 このような数を保持するサーバーは、外部接続がない場合に検出し、順番にシャットダウンできます。
継承
IExternalConnection インターフェイスは、IUnknown インターフェイスから継承します。 IExternalConnection には、次の種類のメンバーもあります。
メソッド
IExternalConnection インターフェイスには、これらのメソッドがあります。
IExternalConnection::AddConnection IExternalConnection::AddConnection メソッド (objidl.h) は、オブジェクトの強力な外部接続の数をインクリメントします。 |
IExternalConnection::ReleaseConnection IExternalConnection::ReleaseConnection メソッド (objidl.h) は、オブジェクトの強力な外部接続の数をデクリメントします。 |
注釈
IExternalConnection は、サイレント更新後に埋め込みオブジェクトへのリンクを順番にシャットダウンできるようにするために、サーバー オブジェクトに最も一般的に実装されます。 IExternalConnection を実装していないオブジェクトは、このような状況でデータを失うリスクがあります。最終的なリンク クライアントが埋め込み (サーバー) オブジェクトを解放すると、オブジェクトのスタブ マネージャーの最後の外部接続が解放され、スタブ マネージャーは埋め込みオブジェクト上のインターフェイスへのポインターを解放し、オブジェクトのシャットダウンを開始します。 この時点で、サーバー オブジェクトはリンク コンテナーで IOleClientSite::SaveObject を 呼び出し、スタブ マネージャーに埋め込みオブジェクトへのポインターがないため、リンク コンテナーの IPersistStorage::Save への呼び出しが失敗します。 その後、サーバー オブジェクトのデータに対する未保存の変更はすべて失われます。
ただし、サーバー オブジェクトが IExternalConnection を実装している場合、スタブ マネージャーは、最後の外部接続が解放されたときにオブジェクトへの接続を解放しません。 代わりに、オブジェクト自体を破棄する準備ができるまで接続された状態を維持します。
標準マーシャリングでは、オブジェクトの外部接続数をインクリメントするために、オブジェクトが最初にマーシャリングされるときに、COM はオブジェクトに対して IExternalConnection::AddConnection を呼び出します。 スタブ マネージャーは、後続の外部接続が取得および解放されると、 オブジェクトで IExternalConnection のメソッドを呼び出します。 オブジェクトの外部接続数が 0 になると、オブジェクトはデータを保存し、実行中のオブジェクト テーブルから自身を取り消し、オブジェクト参照数を 0 に減らすために必要な操作を行うことができます。
IExternalConnection を実装するオブジェクトは、外部参照数が 0 に低下したときに、CoDisconnectObject を明示的に呼び出す必要があります。 この呼び出しにより、スタブ マネージャーはオブジェクトに対して Release を呼び出して、オブジェクト自体を破棄できるようにします。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows 2000 Professional [デスクトップ アプリのみ] |
サポートされている最小のサーバー | Windows 2000 Server [デスクトップ アプリのみ] |
対象プラットフォーム | Windows |
ヘッダー | objidl.h (ObjIdl.h を含む) |