次の方法で共有


コネクション ポイントに関するグローバル関数

これらの関数からは、接続ポイントとシンク マップのサポートが提供されます。

重要

次の表に示す関数は、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.

関連項目

関数
接続ポイントに関するマクロ