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.
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 |