开发者

GlobalInterfacePointer passing using AfxBeginthread

I am using a 开发者_JAVA百科worker thread inside a CDialog class.

 theApp.m_pWorkerThread = AfxBeginThread(Threadproc,this);

Now I need to pass a global Inerface poiner to the worker thread so as to access a COM object from outside

Can someone tell me the syntax to pass the GIT cookie and access it inside the thread.

Thanks


Well, I will answer this myself

This can be done in 3 ways actually. one way I will brief.

using the CComGitPtr from atlbase.h

Do like this :

CComGitPtr GitPtrName (pointer to the initialized interface)

Now extract the cookie from the DWORD dwCokie = GitPtrName->Detach();

Now pass the cookie as a content of struct(optional) inside the worker thread.

Once you are inside the worker thread, extract the cookie, call CoInitilize, and instantiate the reqiuired interface pointer.

as COMInterfacethatneedMarshalling pReqd.

Now pass the git cookie to the GI table and retrieve the marshalled COM object.

like:

    // 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!

Thanks.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜