Create New Interfaces to the Same Object

In this scenario, the server responds to each OBJID_CLIENT request by obtaining a new interface pointer to the same object.

In the following example code, m_pUIObj is a pointer to an object that supports more than one COM interface. Even though an existing object is reused, a new interface pointer is created each time the object is retrieved, so the reference count must be decremented.

case WM_GETOBJECT:
   if ((DWORD)lParam == OBJID_CLIENT)
   {
      // Get a new interface to the same object.
      IAccessible *pAcc = NULL;
      // The following increments the reference count.
      m_pUIObj->QueryInterface(IID_IAccessible, (LPVOID*)&pAcc); 
      LRESULT lAcc = LresultFromObject(IID_IAccessible, wParam, 
            (LPUNKNOWN) &pAcc); 
      // Release our reference to the object.            
      pAcc->Release();               
      return lAcc;
   }
   break;  // Fall through to DefWindowProc.