次の方法で共有


TF_GetThreadMgr関数 (msctf.h)

TF_GetThreadMgr関数は、呼び出し元スレッド内で以前に作成されたスレッド マネージャー オブジェクトのコピーを取得します。

構文

HRESULT TF_GetThreadMgr(
  [out] ITfThreadMgr **pptim
);

パラメーター

[out] pptim

スレッド マネージャー オブジェクトを受け取る ITfThreadMgr インターフェイス ポインターへのポインター。 呼び出し元のスレッド内にスレッド マネージャーが作成されていない場合、NULL 受け取ります。

戻り値

説明
S_OK 関数は成功しました。 呼び出し元のスレッド内にスレッド マネージャーが作成されていない場合、pptimNULL になります。
E_FAIL 未指定のエラーが発生しました。

解説

呼び出し元のスレッド内にスレッド マネージャーが作成されていない場合、この関数は pptimNULL に設定し、S_OKを返します。 したがって、pptim を使用する前に、関数が成功し、pptimNULL ではないことを確認する必要があります。

この関数を定義するインポート ライブラリがないため、 LoadLibraryGetProcAddress を使用してこの関数へのポインターを手動で取得する必要があります。 これを実現する方法を次のコード例に示します。

次の例では、以前に作成したスレッド マネージャー オブジェクトのコピーを取得する関数を示します。 呼び出し元のスレッド内にスレッド マネージャー オブジェクトが存在しない場合、関数によって作成されます。

  

LoadLibrary を誤って使用すると、間違った DLL を読み込むことで、アプリケーションのセキュリティが損なわれる可能性があります。 さまざまなバージョンの Windows で DLL を正しく読み込む方法については、 LoadLibrary のドキュメントを参照してください。

 

typedef HRESULT (WINAPI *PTF_GETTHREADMGR)(ITfThreadMgr **pptim);

HRESULT GetThreadMgr(ITfThreadMgr **pptm)
{
    HRESULT hr = E_FAIL;
    HMODULE hMSCTF = LoadLibrary(TEXT("msctf.dll"));
    ITfThreadMgr *pThreadMgr = NULL;

    if(hMSCTF == NULL)
    {
        //Error loading module -- fail as securely as possible 
    }

    else
    {
        PTF_GETTHREADMGR pfnGetThreadMgr;
    
        pfnGetThreadMgr = (PTF_GETTHREADMGR)GetProcAddress(hMSCTF, "TF_GetThreadMgr");

        if(pfnGetThreadMgr)
        {
            hr = (*pfnGetThreadMgr)(&pThreadMgr);
        }
        
        FreeLibrary(hMSCTF);
    }

    //If no object could be obtained, try to create one. 
    if(NULL == pThreadMgr)
    {
        //CoInitialize or OleInitialize must already have been called. 
        hr = CoCreateInstance(  CLSID_TF_ThreadMgr, 
                                NULL, 
                                CLSCTX_INPROC_SERVER, 
                                IID_ITfThreadMgr, 
                                (void**)&pThreadMgr);
    }

    *pptm = pThreadMgr;

    return hr;
}

要件

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

こちらもご覧ください

GetProcAddress

ITfThreadMgr

LoadLibrary