rajesh482 Ответов: 0

Метод "Getinterfacefromglobal" возвращает код ошибки "0x8000ffff"


Я имплиментировал проект ATL single thread apartment based .
class ATL_NO_VTABLE CMySrv :
	public CComObjectRootEx<ccomsinglethreadmodel>,
	public CComCoClass<cmysrv,&clsid_mysrv>,
	public IMySrv

В этом методе я создаю несколько рабочих потоков и обращаюсь к указателю интерфейса из одного контекста в другой с помощью COM - интерфейса "IGlobalInterfaceTable"

В основном потоке зарегистрирован интерфейс
void CMySrv::save()
{
    CComQIPtr<imysrv>  pMySrv(GetUnknown());
    CComPtr<iglobalinterfacetable> l_git;
    l_git.CoCreateInstance( CLSID_StdGlobalInterfaceTable );
    l_git->RegisterInterfaceInGlobal(pMySrv, __uuidof(IMySrv), &dwCookie );

    for(int i=0;i<9;i++)
        _beginthreadex( 0,0,&(CParllelThreadOperations::ThreadFunc),LPVOID(&dwCookie), 0, &dwThId);

    ////logic implemented to wait for all the child threads
}

В рабочем потоке я передаю информацию о файлах cookie и получаю интерфейс
CComPtr<iglobalinterfacetable> git;
CComPtr<imysrv>  pMySrv;
HRESULT hr= 0;
if(git.CoCreateInstance( CLSID_StdGlobalInterfaceTable)>=0)
hr= git->GetInterfaceFromGlobal( dwCookie, __uuidof(IMySrv), (void**)&pMySrv);

Но "GetInterfaceFromGlobal" возвращает код ошибки "0x8000ffff" (это происходит редко )
Не могли бы вы мне в этом помочь?

Что я уже пробовал:

Я не очень хорошо разбираюсь в интерфейсе GIT и читаю другие статьи Механика COM+ | механика | Информит[^]

0 Ответов