Передача GlobalInterfacePointer с использованием AfxBeginthread - PullRequest
0 голосов
/ 30 августа 2010

Я использую рабочий поток внутри класса CDialog.

 theApp.m_pWorkerThread = AfxBeginThread(Threadproc,this);

Теперь мне нужно передать глобальный указатель Inerface в рабочий поток, чтобы получить доступ к COM-объекту извне

Может кто-нибудь сказать мне синтаксис для передачи куки GIT и доступа к нему внутри потока.

Спасибо

1 Ответ

0 голосов
/ 08 сентября 2010

Ну, я сам на это отвечу

На самом деле это можно сделать тремя способами.В одном случае я опишу.

с использованием CComGitPtr из atlbase.h

Сделайте так:

CComGitPtr GitPtrName (указатель на инициализированный интерфейс)

Теперь извлеките файл cookie из DWORD. DwCokie = GitPtrName-> Detach ();

Теперь передайте файл cookie как содержимое структуры (необязательно) внутри рабочего потока.

Как только вы окажетесь внутри рабочего потока, извлеките файл cookie, вызовите CoInitilize и создайте экземпляр указателя требуемого интерфейса.

как COMInterfacethatneedMarshalling pReqd.

Теперь передайте файл cookie git в таблицу GI и получитемаршалированный COM-объект.

как:

    // This is done inide the thread
    // retrieve the passed cookie as dwCookie
    CComGITPtr<COMInterfacethatneedMarshalling

pToGITTest (dwCookie);COMInterfacethatneedMarshalling pReqd;pToGITTest.CopyTo (& pReqd);

   Now we have pToGITTest inside the thread, fully marshalled, go ahead and enjoy!

Спасибо.

...