funzione TF_GetThreadMgr (msctf.h)
La funzione TF_GetThreadMgr ottiene una copia di un oggetto di gestione thread creato in precedenza all'interno del thread chiamante.
Sintassi
HRESULT TF_GetThreadMgr(
[out] ITfThreadMgr **pptim
);
Parametri
[out] pptim
Puntatore a un puntatore dell'interfaccia ITfThreadMgr che riceve l'oggetto gestione thread. Questo riceve NULL se non viene creato alcun thread manager all'interno del thread chiamante.
Valore restituito
Valore | Significato |
---|---|
S_OK | La funzione ha avuto esito positivo. pptim sarà NULL se non viene creato alcun thread manager all'interno del thread chiamante. |
E_FAIL | Si è verificato un errore non specificato. |
Commenti
Se non viene creato alcun thread manager all'interno del thread chiamante, questa funzione imposta pptim su NULL e restituisce S_OK. È quindi necessario verificare che la funzione abbia avuto esito positivo e che pptim non sia NULL prima di usare pptim.
Esempio
Non è disponibile alcuna libreria di importazione che definisce questa funzione, pertanto è necessario ottenere manualmente un puntatore a questa funzione usando LoadLibrary e GetProcAddress. Nell'esempio di codice seguente viene illustrato come eseguire questa operazione.
Nell'esempio seguente viene illustrata una funzione che tenterà di ottenere una copia di un oggetto thread manager creato in precedenza. Se non esiste alcun oggetto thread manager all'interno del thread chiamante, la funzione creerà una.
L'uso di LoadLibrary in modo errato può compromettere la sicurezza dell'applicazione caricando la DLL errata. Per informazioni su come caricare correttamente le DLL con versioni diverse di Windows, vedere la documentazione di 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;
}
Requisiti
Requisito | Valore |
---|---|
Client minimo supportato | Windows 2000 Professional [solo app desktop] |
Server minimo supportato | Windows 2000 Server [solo app desktop] |
Piattaforma di destinazione | Windows |
Intestazione | msctf.h |
DLL | Msctf.dll |
Componente ridistribuibile | TSF 1.0 in Windows XPWindows 2000 Professional |