TF_GetThreadMgr関数 (msctf.h)
TF_GetThreadMgr関数は、呼び出し元スレッド内で以前に作成されたスレッド マネージャー オブジェクトのコピーを取得します。
構文
HRESULT TF_GetThreadMgr(
[out] ITfThreadMgr **pptim
);
パラメーター
[out] pptim
スレッド マネージャー オブジェクトを受け取る ITfThreadMgr インターフェイス ポインターへのポインター。 呼び出し元のスレッド内にスレッド マネージャーが作成されていない場合、NULL を 受け取ります。
戻り値
値 | 説明 |
---|---|
S_OK | 関数は成功しました。 呼び出し元のスレッド内にスレッド マネージャーが作成されていない場合、pptim は NULL になります。 |
E_FAIL | 未指定のエラーが発生しました。 |
解説
呼び出し元のスレッド内にスレッド マネージャーが作成されていない場合、この関数は pptim を NULL に設定し、S_OKを返します。 したがって、pptim を使用する前に、関数が成功し、pptim が NULL ではないことを確認する必要があります。
例
この関数を定義するインポート ライブラリがないため、 LoadLibrary と GetProcAddress を使用してこの関数へのポインターを手動で取得する必要があります。 これを実現する方法を次のコード例に示します。
次の例では、以前に作成したスレッド マネージャー オブジェクトのコピーを取得する関数を示します。 呼び出し元のスレッド内にスレッド マネージャー オブジェクトが存在しない場合、関数によって作成されます。
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 |