COM

CComPtr Misconception !!!

This is about a killer bug identified by our chief software engineer in our application. What was devised for ease of use and write smart code ended up in this killer defect due to improper perception. Ok, let us go!

CComPtr is a template class in ATL designed to wrap the discrete functionality of COM object management – AddRef and Release. Technically it is a smart pointer for a COM object.

More ...

CoMarshal ... Working in NT, Not in XP !!!

Problem:

I have created a multi-threaded application which works without any problems on a NT-4.0 Workstation/Server. When I try to run the same application in Windows XP, I get an error in a call to CoMarshalInterThreadInterfaceInStream which returns -2147418113.

I have provided a snippet of the code below where the call fails in Windows XP.

Environment: Windows-XP,SP-2,Visual Studio 6.0,SP-4,ATL-3.0

Should I be doing anything different in Windows XP?


HRESULT hr = S_OK;
IUnknown** pp = p->m_vec.begin();

while (pp m_vec.end() && hr == S_OK)
{
   if (*pp != NULL)
   {
         IEvent* pEvent = (IEvent*)*pp;
         IStream* pIStream;

         HRESULT hr = CoMarshalInterThreadInterfaceInStream(
            IID_IEvent,
            pEvent,
            &pIStream
         );

         if(SUCCEEDED(hr))
         {
            CComPtr pMarshalEvent;
            hr = CoGetInterfaceAndReleaseStream(
               pIStream,
               IID_IEvent,
               (void**)&pMarshalEvent
            );

            if(SUCCEEDED(hr))
            {
               hr = pMarshalEvent->NewCurrentCassette(m_pCurrentCassette, m_setBy);
            }
         }

      p++;
   }
}

Thread 2:

More ...