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 專業版 [僅限傳統型應用程式] |
最低支援的伺服器 | Windows 2000 Server [僅限傳統型應用程式] |
目標平台 | Windows |
標頭 | msctf.h |
Dll | Msctf.dll |
可轉散發套件 | Windows XPWindows 2000 Professional 上的 TSF 1.0 |