コネクション ポイントに関するグローバル関数
これらの関数からは、接続ポイントとシンク マップのサポートが提供されます。
重要
次の表に示す関数は、Windows ランタイムで実行されるアプリケーションでは使用できません。
関数 | 説明 |
---|---|
AtlAdvise | オブジェクトのコネクション ポイントとクライアントのシンクとの間に接続を確立します。 |
AtlUnadvise | AtlAdvise 経由で確立された接続を終了します。 |
AtlAdviseSinkMap | イベント シンク マップ内のエントリをアドバイスまたはアドバイス解除します。 |
要件
ヘッダー: atlbase.h
AtlAdvise
オブジェクトのコネクション ポイントとクライアントのシンクとの間に接続を確立します。
重要
この関数は、Windows ランタイムで実行するアプリケーションでは使用できません。
HRESULT AtlAdvise(
IUnknown* pUnkCP,
IUnknown* pUnk,
const IID& iid,
LPDWORD pdw);
パラメーター
pUnkCP
[in] クライアントが接続するオブジェクトの IUnknown
へのポインター。
pUnk
[in] クライアントの IUnknown
へのポインター。
iid
[in] 接続ポイントの GUID。 通常、これは接続ポイントによって管理される発信インターフェイスと同じです。
pdw
[out] 接続を一意に識別する Cookie へのポインター。
戻り値
標準の HRESULT 値。
解説
シンクは、接続ポイントでサポートされている発信インターフェイスを実装します。 クライアントは pdw Cookie を使用し、AtlUnadvise に渡して接続を削除します。
例
LPUNKNOWN m_pSourceUnk;
LPUNKNOWN m_pSinkUnk;
DWORD m_dwCustCookie;
// create source object
HRESULT hr = CoCreateInstance (CLSID_MyComponent, NULL, CLSCTX_ALL,
IID_IUnknown, (LPVOID*)&m_pSourceUnk);
ATLASSERT(SUCCEEDED(hr));
// Create sink object. CMySink is a CComObjectRootEx-derived class
// that implements the event interface methods.
CComObject<CMySink>* pSinkClass;
CComObject<CMySink>::CreateInstance(&pSinkClass);
hr = pSinkClass->QueryInterface (IID_IUnknown, (LPVOID*)&m_pSinkUnk);
ATLASSERT(SUCCEEDED(hr));
hr = AtlAdvise (m_pSourceUnk, m_pSinkUnk, __uuidof(_IMyComponentEvents), &m_dwCustCookie);
ATLASSERT(SUCCEEDED(hr));
AtlUnadvise
AtlAdvise を経由で確立された接続を終了します。
重要
この関数は、Windows ランタイムで実行するアプリケーションでは使用できません。
HRESULT AtlUnadvise(
IUnknown* pUnkCP,
const IID& iid,
DWORD dw);
パラメーター
pUnkCP
[in] クライアントが接続されているオブジェクトの IUnknown
へのポインター。
iid
[in] 接続ポイントの GUID。 通常、これは接続ポイントによって管理される発信インターフェイスと同じです。
dw
[in] 接続を一意に識別する Cookie。
戻り値
標準の HRESULT 値。
例
LPUNKNOWN m_pSourceUnk;
LPUNKNOWN m_pSinkUnk;
DWORD m_dwCustCookie;
// create source object
HRESULT hr = CoCreateInstance (CLSID_MyComponent, NULL, CLSCTX_ALL,
IID_IUnknown, (LPVOID*)&m_pSourceUnk);
ATLASSERT(SUCCEEDED(hr));
// Create sink object. CMySink is a CComObjectRootEx-derived class
// that implements the event interface methods.
CComObject<CMySink>* pSinkClass;
CComObject<CMySink>::CreateInstance(&pSinkClass);
hr = pSinkClass->QueryInterface (IID_IUnknown, (LPVOID*)&m_pSinkUnk);
ATLASSERT(SUCCEEDED(hr));
hr = AtlAdvise (m_pSourceUnk, m_pSinkUnk, __uuidof(_IMyComponentEvents), &m_dwCustCookie);
ATLASSERT(SUCCEEDED(hr));
// do something
CComBSTR bstrMsg(L"Hi there!");
((CMyComponent*)m_pSourceUnk)->Fire_ShowMyMsg(bstrMsg);
hr = AtlUnadvise (m_pSourceUnk, __uuidof(_IMyComponentEvents), m_dwCustCookie);
ATLASSERT(SUCCEEDED(hr));
AtlAdviseSinkMap
オブジェクトのシンク イベント マップのすべてのエントリをアドバイズするか、アドバイズを中止します。
重要
この関数は、Windows ランタイムで実行するアプリケーションでは使用できません。
HRESULT AtlAdviseSinkMap(T* pT, bool bAdvise);
パラメーター
pT
[in] シンク マップを含むオブジェクトへのポインター。
bAdvise
[in] すべてのシンク エントリがアドバイスされる場合は TRUE、すべてのエントリがアドバイス解除される場合は FALSE。
戻り値
標準の HRESULT 値。
例
class CMyDlg :
public CAxDialogImpl<CMyDlg>
{
public:
BEGIN_MSG_MAP(CMyDlg)
MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
COMMAND_HANDLER(IDOK, BN_CLICKED, OnClickedOK)
COMMAND_HANDLER(IDCANCEL, BN_CLICKED, OnClickedCancel)
CHAIN_MSG_MAP(CAxDialogImpl<CMyDlg>)
END_MSG_MAP()
LRESULT OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
CAxDialogImpl<CMyDlg>::OnInitDialog(uMsg, wParam, lParam, bHandled);
AtlAdviseSinkMap(this, TRUE);
bHandled = TRUE;
return 1; // Let the system set the focus
}
// Remainder of class declaration omitted.