Compartilhar via


função TF_GetThreadMgr (msctf.h)

A função TF_GetThreadMgr obtém uma cópia de um objeto do gerenciador de threads criado anteriormente no thread de chamada.

Sintaxe

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

Parâmetros

[out] pptim

Ponteiro para um ponteiro de interface ITfThreadMgr que recebe o objeto do gerenciador de threads. Isso receberá NULL se nenhum gerenciador de threads for criado dentro do thread de chamada.

Valor retornado

Valor Significado
S_OK A função foi bem-sucedida. pptim será NULL se nenhum gerenciador de threads for criado dentro do thread de chamada.
E_FAIL Ocorreu um erro não especificado.

Comentários

Se nenhum gerenciador de threads for criado no thread de chamada, essa função definirá pptim como NULL e retornará S_OK. Portanto, é necessário verificar se a função foi bem-sucedida e se pptim não é NULL antes de usar pptim.

Exemplos

Não há nenhuma biblioteca de importação disponível que defina essa função, portanto, é necessário obter manualmente um ponteiro para essa função usando LoadLibrary e GetProcAddress. O exemplo de código a seguir demonstra como fazer isso.

O exemplo a seguir demonstra uma função que tentará obter uma cópia de um objeto gerenciador de threads criado anteriormente. Se nenhum objeto do gerenciador de threads existir dentro do thread de chamada, a função criará um.

Observação  

Usar LoadLibrary incorretamente pode comprometer a segurança do aplicativo carregando a DLL errada. Consulte a documentação do LoadLibrary para obter informações sobre como carregar corretamente DLLs com diferentes versões do Windows.

 

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

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows 2000 Professional [somente aplicativos da área de trabalho]
Servidor mínimo com suporte Windows 2000 Server [somente aplicativos da área de trabalho]
Plataforma de Destino Windows
Cabeçalho msctf.h
DLL Msctf.dll
Redistribuível TSF 1.0 no Windows XPWindows 2000 Professional

Confira também

GetProcAddress

ITfThreadMgr

LoadLibrary