共用方式為


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

範例

沒有可定義此函式的匯入連結庫,因此必須使用 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 專業版 [僅限傳統型應用程式]
最低支援的伺服器 Windows 2000 Server [僅限傳統型應用程式]
目標平台 Windows
標頭 msctf.h
Dll Msctf.dll
可轉散發套件 Windows XPWindows 2000 Professional 上的 TSF 1.0

另請參閱

GetProcAddress

ITfThreadMgr

LoadLibrary