Поделиться через


функция TF_GetThreadMgr (msctf.h)

Функция TF_GetThreadMgr получает копию объекта диспетчера потоков, ранее созданного в вызывающем потоке.

Синтаксис

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

Параметры

[out] pptim

Указатель на указатель интерфейса ITfThreadMgr , который получает объект диспетчера потоков. Он получает значение NULL , если в вызывающем потоке не создан диспетчер потоков.

Возвращаемое значение

Значение Значение
S_OK Функция выполнена успешно. pptim будет иметь значение NULL , если диспетчер потоков не создан в вызывающем потоке.
E_FAIL Произошла неизвестная ошибка.

Комментарии

Если диспетчер потоков не создан в вызывающем потоке, эта функция присвоит pptim значение NULL и вернет S_OK. Поэтому перед использованием pptim необходимо убедиться, что функция выполнена успешно и что pptim не имеет значение NULL.

Примеры

Нет доступной библиотеки импорта, определяющей эту функцию, поэтому необходимо вручную получить указатель на эту функцию с помощью LoadLibrary и GetProcAddress. В следующем примере кода показано, как это сделать.

В следующем примере показана функция, которая попытается получить копию ранее созданного объекта диспетчера потоков. Если в вызывающем потоке не существует объекта диспетчера потоков, функция создаст его.

Примечание  

Неправильное использование LoadLibrary может поставить под угрозу безопасность приложения, загрузив неправильную библиотеку DLL. Сведения о том, как правильно загружать библиотеки DLL с различными версиями Windows, см. в документации по 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;
}

Требования

Требование Значение
Минимальная версия клиента Windows 2000 Professional [только классические приложения]
Минимальная версия сервера Windows 2000 Server [только классические приложения]
Целевая платформа Windows
Header msctf.h
DLL Msctf.dll
Распространяемые компоненты TSF 1.0 в Windows XPWindows 2000 Professional

См. также раздел

Функция GetProcAddress

ITfThreadMgr

LoadLibrary