コネクション マップ

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

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

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 ファイルで、 BEGIN_CONNECTION_MAP マクロ、コントロールの各接続ポイントのマクロを CONNECTION_PART し、 END_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 へのポインター。 この値は、接続を切断するときにAfxConnectionUnadviseするdwCookie パラメーターとして渡す必要があります。

戻り値

接続が確立された場合は 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

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

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

関連項目

マクロとグローバル