Freigeben über


TF_GetThreadMgr-Funktion (msctf.h)

Die TF_GetThreadMgr-Funktion ruft eine Kopie eines Thread-Manager-Objekts ab, das zuvor im aufrufenden Thread erstellt wurde.

Syntax

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

Parameter

[out] pptim

Zeiger auf einen ITfThreadMgr-Schnittstellenzeiger , der das Thread-Manager-Objekt empfängt. Dies empfängt NULL , wenn innerhalb des aufrufenden Threads kein Thread-Manager erstellt wird.

Rückgabewert

Wert Bedeutung
S_OK Die Funktion war erfolgreich. pptim ist NULL , wenn innerhalb des aufrufenden Threads kein Thread-Manager erstellt wird.
E_FAIL Es ist ein unbekannter Fehler aufgetreten.

Hinweise

Wenn innerhalb des aufrufenden Threads kein Thread-Manager erstellt wird, legt diese Funktion pptim auf NULL fest und gibt S_OK zurück. Daher müssen Sie überprüfen, ob die Funktion erfolgreich war und dass pptim nicht NULL ist, bevor Sie pptim verwenden.

Beispiele

Es ist keine Importbibliothek verfügbar, die diese Funktion definiert. Daher ist es notwendig, mithilfe von LoadLibrary und GetProcAddress manuell einen Zeiger auf diese Funktion abzurufen. Im folgenden Codebeispiel wird veranschaulicht, wie Dies erreicht wird.

Im folgenden Beispiel wird eine Funktion veranschaulicht, die versucht, eine Kopie eines zuvor erstellten Thread-Manager-Objekts abzurufen. Wenn im aufrufenden Thread kein Thread-Manager-Objekt vorhanden ist, erstellt die Funktion ein Objekt.

Hinweis  

Die falsche Verwendung von LoadLibrary kann die Sicherheit Ihrer Anwendung gefährden, indem die falsche DLL geladen wird. Informationen zum ordnungsgemäßen Laden von DLLs mit verschiedenen Windows-Versionen finden Sie in der LoadLibrary-Dokumentation .

 

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;
}

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows 2000 Professional [nur Desktop-Apps]
Unterstützte Mindestversion (Server) Windows 2000 Server [nur Desktop-Apps]
Zielplattform Windows
Kopfzeile msctf.h
DLL Msctf.dll
Verteilbare Komponente TSF 1.0 unter Windows XPWindows 2000 Professional

Weitere Informationen

GetProcAddress

ITfThreadMgr

LoadLibrary