次の方法で共有


ITextStoreACP::AdviseSink メソッド (textstor.h)

ITextStoreACP::AdviseSink メソッドは、ITextStoreACPSink インターフェイスから新しいアドバイズ シンクをインストールするか、既存のアドバイズ シンクを変更します。 シンク インターフェイスは、 punk パラメーターによって指定されます。

構文

HRESULT AdviseSink(
  [in] REFIID   riid,
  [in] IUnknown *punk,
  [in] DWORD    dwMask
);

パラメーター

[in] riid

シンク インターフェイスを指定します。

[in] punk

シンク インターフェイスへのポインター。 NULL にすることはできません。

[in] dwMask

アドバイズ シンクに通知するイベントを指定します。 使用可能なパラメーター値の詳細については、「 TS_AS_* 定数」を参照してください。

戻り値

このメソッドは、これらの値のいずれかを返すことができます。

説明
S_OK
メソッドは正常に実行されました。
CONNECT_E_ADVISELIMIT
シンク インターフェイス ポインターを取得できませんでした。
E_INVALIDARG
指定されたシンク インターフェイスはサポートされていません。
E_UNEXPECTED
指定したシンク オブジェクトを取得できませんでした。

注釈

punk パラメーターで表される同じインターフェイスを持つ後続の呼び出しは、dwMask パラメーターを更新するための要求として処理されます。 サーバーは、このような要求に応答してシンクで AddRef メソッドを呼び出さないでください。

サーバーは 1 つの接続ポイントのみを保持します。 元のシンク オブジェクトが削除されるまで、2 つ目のシンク オブジェクトのエラーを知らそうとします。 通知が不要な場合は、アプリケーションで ITextStoreACP::UnadviseSink メソッドを使用してシンク オブジェクトの登録を解除する必要があります。

ITextStoreACPServices インターフェイスを取得するには、このメソッドを使用します。

CMyTextEditor ITextStoreACP


STDMETHODIMP CMyTextEditor::AdviseSink(REFIID riid, IUnknown *punk, DWORD dwMask)
{
        HRESULT         hr;
        IUnknown                *punkID;
        typedef struct
        {
        IUnknown                *punkID;
        ITextStoreACPSink       *pTextStoreACPSink;
        DWORD                   dwMask;
        }ADVISE_SINK, *PADVISE_SINK;    
        
        // Determine if the sink interface exists. 
        // Get the pointer to the IUnknown interface and check if the IUnknown 
        // pointer is the same as a pointer to an existing sink. 
        // If the sink exists, update the existing sink with the  
        // dwMask parameters passed to this method.      
        hr = QueryInterface(IID_IUnknown, (LPVOID*)&punkID);

        if(FAILED(hr))
        {
                hr = E_INVALIDARG;
        }       

        if(punkID == m_AdviseSink.punkID)
        {
                m_AdviseSink.dwMask = dwMask;
                hr = S_OK;
        }

        // If the sink does not exist, do the following: 
        // 1. Install a new sink. 
        // 2. Keep the pointer to the IUnknown interface to uniquely 
        //        identify this advise sink. 
        // 3. Set the dwMask parameter of this new sink to the dwMask  
        //    parameters passed to this method. 
        // 4. Increment the reference count. 
        // 5. Release the IUnknown pointer, since this pointer is no 
        //        longer required. 

        if(IsEqualIID(riid, IID_ITextStoreACPSink))
        {
                punk->QueryInterface(IID_ITextStoreACPSink,
                         (LPVOID*)&m_AdviseSink.pTextStoreACPSink);
                m_AdviseSink.punkID = punkID;
                m_AdviseSink.dwMask = dwMask;
                punkID->AddRef();
                punkID->Release();

                hr = S_OK;
        }
        return hr;
        
}

要件

要件
サポートされている最小のクライアント Windows 2000 Professional [デスクトップ アプリのみ]
サポートされている最小のサーバー Windows 2000 Server [デスクトップ アプリのみ]
対象プラットフォーム Windows
ヘッダー textstor.h
[DLL] Msctf.dll
再頒布可能パッケージ Windows 2000 Professional 上の TSF 1.0

こちらもご覧ください

ITextStoreACP

ITextStoreACP::UnadviseSink

ITextStoreACPServices

TS_AS_* 定数