Partager via


fonction TF_GetThreadMgr (msctf.h)

La fonction TF_GetThreadMgr obtient une copie d’un objet de gestionnaire de threads créé précédemment dans le thread appelant.

Syntaxe

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

Paramètres

[out] pptim

Pointeur vers un pointeur d’interface ITfThreadMgr qui reçoit l’objet gestionnaire de threads. Cette opération reçoit la valeur NULL si aucun gestionnaire de threads n’est créé dans le thread appelant.

Valeur retournée

Valeur Signification
S_OK La fonction a réussi. pptim aura la valeur NULL si aucun gestionnaire de threads n’est créé dans le thread appelant.
E_FAIL Une erreur non spécifiée s'est produite.

Remarques

Si aucun gestionnaire de threads n’est créé dans le thread appelant, cette fonction définit pptim sur NULL et retourne S_OK. Par conséquent, il est nécessaire de vérifier que la fonction a réussi et que pptim n’est pas NULL avant d’utiliser pptim.

Exemples

Il n’existe aucune bibliothèque d’importation disponible qui définit cette fonction. Il est donc nécessaire d’obtenir manuellement un pointeur vers cette fonction à l’aide de LoadLibrary et de GetProcAddress. L’exemple de code suivant montre comment effectuer cette opération.

L’exemple suivant illustre une fonction qui tente d’obtenir une copie d’un objet gestionnaire de threads créé précédemment. S’il n’existe aucun objet de gestionnaire de threads dans le thread appelant, la fonction en crée un.

Remarque  

L’utilisation incorrecte de LoadLibrary peut compromettre la sécurité de votre application en chargeant la DLL incorrecte. Pour plus d’informations sur le chargement correct des DLL avec différentes versions de Windows, reportez-vous à la documentation 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;
}

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows 2000 Professionnel [applications de bureau uniquement]
Serveur minimal pris en charge Windows 2000 Server [applications de bureau uniquement]
Plateforme cible Windows
En-tête msctf.h
DLL Msctf.dll
Composant redistribuable TSF 1.0 sur Windows XPWindows 2000 Professionnel

Voir aussi

GetProcAddress

ITfThreadMgr

LoadLibrary