Метод "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+ | механика | Информит[^]