функция 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 |