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