コネクション マップ
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
関連項目
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示