コネクション マップ
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