コネクション マップ

OLE コントロールは、他のアプリケーションにインターフェイスを公開できます。 これらのインターフェイスでは、コンテナーからそのコントロールへのアクセスのみが許可されます。 OLE コントロールが他の OLE オブジェクトの外部インターフェイスにアクセスする場合は、接続ポイントを確立する必要があります。 この接続ポイントにより、イベント マップや通知関数などの外部ディスパッチ マップへの制御送信アクセスが可能になります。

Microsoft Foundation クラス ライブラリには、接続ポイントをサポートするプログラミング モデルが用意されています。 このモデルでは、"接続マップ" を使用して、OLE コントロールのインターフェイスまたは接続ポイントを指定します。 接続マップには、接続ポイントごとに 1 つのマクロが含まれています。 接続マップの詳細については、クラスを CConnectionPoint 参照してください。

通常、コントロールは、イベント用とプロパティ通知用の 2 つの接続ポイントのみをサポートします。 これらは基底クラスによって COleControl 実装され、コントロール ライターによる追加の作業は必要ありません。 クラスに実装するその他の接続ポイントは、手動で追加する必要があります。 接続マップとポイントをサポートするために、MFC には次のマクロが用意されています。

接続マップの宣言と区分

名前 説明
BEGIN_CONNECTION_PART 追加の接続ポイントを実装する埋め込みクラスを宣言します (クラス宣言で使用する必要があります)。
END_CONNECTION_PART 接続ポイントの宣言を終了します (クラス宣言で使用する必要があります)。
CONNECTION_IID コントロールの接続ポイントのインターフェイス ID を指定します。
DECLARE_CONNECTION_MAP 接続マップをクラスで使用することを宣言します (クラス宣言で使用する必要があります)。
BEGIN_CONNECTION_MAP 接続マップの定義を開始します (クラス実装で使用する必要があります)。
END_CONNECTION_MAP 接続マップの定義を終了します (クラス実装で使用する必要があります)。
CONNECTION_PART コントロールの接続マップ内の接続ポイントを指定します。

次の関数は、接続ポイントを使用して接続を確立および切断するシンクを支援します。

接続ポイントの初期化/終了

名前 説明
AfxConnectionAdvise ソースとシンクの間の接続を確立します。
AfxConnectionUnadvise ソースとシンクの間の接続を切断します。

BEGIN_CONNECTION_PART

このマクロを BEGIN_CONNECTION_PART 使用して、イベントおよびプロパティ通知接続ポイントを超える追加の接続ポイントの定義を開始します。

BEGIN_CONNECTION_PART(theClass, localClass)

パラメーター

theClass 接続ポイントを持つコントロール クラスの名前を指定します。

localClass 接続ポイントを実装するローカル クラスの名前を指定します。

解説

クラスのメンバー関数を定義する宣言 (.h) ファイルで、マクロを使用して接続ポイントを BEGIN_CONNECTION_PART 開始します。 次に、 CONNECTION_IID マクロと、実装するその他のメンバー関数を追加します。 最後に、マクロを使用して接続ポイント マップを END_CONNECTION_PART 完成させます。

必要条件

ヘッダーafxdisp.h

END_CONNECTION_PART

接続ポイントの宣言を終了します。

END_CONNECTION_PART(localClass)

パラメーター

localClass
接続ポイントを実装するローカル クラスの名前を指定します。

必要条件

ヘッダーafxdisp.h

CONNECTION_IID

マクロとEND_CONNECTION_PARTマクロの間をBEGIN_CONNECTION_PART使用して、OLE コントロールでサポートされている接続ポイントのインターフェイス ID を定義します。

CONNECTION_IID(iid)

パラメーター

iid
接続ポイントによって呼び出されるインターフェイスのインターフェイス ID。

解説

引数は iid 、接続ポイントが接続されたシンクで呼び出すインターフェイスを識別するために使用されるインターフェイス ID です。 次に例を示します。

CONNECTION_IID(IID_ISampleSink)

インターフェイスを呼び出す接続ポイントを ISinkInterface 指定します。

必要条件

ヘッダーafxdisp.h

DECLARE_CONNECTION_MAP

プログラム内の各 COleControl派生クラスは、接続マップを提供して、コントロールがサポートする追加の接続ポイントを指定できます。

DECLARE_CONNECTION_MAP()

解説

コントロールで追加のポイントがサポートされている場合は、クラス宣言の最後にマクロを使用 DECLARE_CONNECTION_MAP します。 次に、クラスのメンバー関数を定義する .cpp ファイルで、マクロ、CONNECTION_PARTコントロールの各接続ポイントのマクロ、およびマクロをEND_CONNECTION_MAP使用BEGIN_CONNECTION_MAPして接続マップの終了を宣言します。

必要条件

ヘッダーafxdisp.h

BEGIN_CONNECTION_MAP

プログラム内の各 COleControl派生クラスは、接続マップを提供して、コントロールがサポートする接続ポイントを指定できます。

BEGIN_CONNECTION_MAP(theClass, theBase)

パラメーター

theClass
接続マップを持つコントロール クラスの名前を指定します。

theBase
の基底クラス theClassの名前を指定します。

解説

クラスのメンバー関数を定義する実装 (.CPP) ファイルで、マクロを使用して接続マップを BEGIN_CONNECTION_MAP 開始し、マクロを使用して各接続ポイントのマクロ エントリを CONNECTION_PART 追加します。 最後に、マクロを使用して接続マップを END_CONNECTION_MAP 完了します。

必要条件

ヘッダーafxdisp.h

END_CONNECTION_MAP

接続マップの定義を終了します。

END_CONNECTION_MAP()

必要条件

ヘッダーafxdisp.h

CONNECTION_PART

OLE コントロールの接続ポイントを特定のインターフェイス ID にマップします。

CONNECTION_PART(theClass, iid, localClass)

パラメーター

theClass
接続ポイントを持つコントロール クラスの名前を指定します。

iid
接続ポイントによって呼び出されるインターフェイスのインターフェイス ID。

localClass
接続ポイントを実装するローカル クラスの名前を指定します。

解説

次に例を示します。

BEGIN_CONNECTION_MAP(CMyClass, CCmdTarget)
    CONNECTION_PART(CMyClass, IID_ISampleSink, SampleConnPt)
END_CONNECTION_MAP()

は、インターフェイスを呼び出す接続マップと接続ポイントを IID_ISinkInterface 実装します。

必要条件

ヘッダーafxdisp.h

AfxConnectionAdvise

この関数を呼び出して、指定されたソースとシンクの間に pUnkSrc接続を pUnkSink確立します。

BOOL AFXAPI AfxConnectionAdvise(
    LPUNKNOWN pUnkSrc,
    REFIID iid,
    LPUNKNOWN pUnkSink,
    BOOL bRefCount,
    DWORD FAR* pdwCookie);

パラメーター

pUnkSrc
インターフェイスを呼び出すオブジェクトへのポインター。

pUnkSink
インターフェイスを実装するオブジェクトへのポインター。

iid
接続のインターフェイス ID。

bRefCount
アウトプロセス接続の場合、このパラメーターは TRUE、接続を作成すると参照カウント pUnkSink がインクリメントされることを示す必要があります。

インプロセス接続の場合は、 TRUE 接続を作成すると、参照カウント pUnkSink がインクリメントされることを示します。 FALSE は、参照カウントをインクリメントしないことを示します。

警告: 一般に、どの接続が処理中で、どの接続がアウトプロセスであるかを予測できないため、常にこのパラメーターを > に TRUE設定することをお勧めします。

pdwCookie
接続識別子が返される場所への DWORD ポインター。 この値は、接続を dwCookie 切断するときにパラメーター AfxConnectionUnadvise として渡す必要があります。

戻り値

接続が確立された場合は 0 以外。それ以外の場合は 0。

//CMySink is a CCmdTarget-derived class supporting automation.
//Instantiate the sink class.
CMySink mysink;

//Get a pointer to sink's IUnknown, no AddRef done.
IID iid = IID_IUnknown;
IUnknown* pUnkSink = mysink.GetInterface(&iid);

//Establish a connection between source and sink.
//pUnkSrc is IUnknown of server obtained by CoCreateInstance().
//dwCookie is a cookie identifying the connection, and is needed
//to terminate this connection.
AfxConnectionAdvise(pUnkSrc, IID_ISampleSink, pUnkSink, FALSE, &dwCookie);

必要条件

ヘッダー:afxctl.h

AfxConnectionUnadvise

この関数を呼び出して、指定されたソースとシンクpUnkSinkの間のpUnkSrc接続を切断します。

BOOL AFXAPI AfxConnectionUnadvise(
    LPUNKNOWN pUnkSrc,
    REFIID iid,
    LPUNKNOWN pUnkSink,
    BOOL bRefCount,
    DWORD dwCookie);

パラメーター

pUnkSrc
インターフェイスを呼び出すオブジェクトへのポインター。

pUnkSink
インターフェイスを実装するオブジェクトへのポインター。

iid
接続ポイント インターフェイスのインターフェイス ID。

bRefCount
アウトプロセス接続の場合、このパラメーターは TRUE、接続を作成すると参照カウント pUnkSink がデクリメントされることを示す必要があります。

インプロセス接続の場合は、 TRUE 接続を作成すると、参照カウント pUnkSink がデクリメントされることを示します。 FALSE は、参照カウントをデクリメントしないことを示します。

警告: 一般に、どの接続が処理中で、どの接続がアウトプロセスであるかを予測できないため、常にこのパラメーターを > に TRUE設定することをお勧めします。

dwCookie
によって AfxConnectionAdvise返される接続識別子。

戻り値

接続が切断された場合は 0 以外。それ以外の場合は 0。

//mysink is a CCmdTarget-derived class supporting automation.
//Get a pointer to sink's IUnknown, no AddRef done.
IID iid = IID_IUnknown;
IUnknown* pUnkSink = mysink.GetInterface(&iid);

//Terminate a connection between source and sink.
//pUnkSrc is IUnknown of server obtained by CoCreateInstance().
//dwCookie is a value obtained through AfxConnectionAdvise().
AfxConnectionUnadvise(pUnkSrc, IID_ISampleSink, pUnkSink, FALSE, dwCookie);

必要条件

ヘッダー:afxctl.h

関連項目

マクロとグローバル