Поделиться через


Создание новых интерфейсов для одного объекта

В этом сценарии сервер отвечает на каждый запрос OBJID_CLIENT путем получения нового указателя интерфейса на тот же объект.

В следующем примере кода m_pUIObj — это указатель на объект, поддерживающий несколько интерфейсов объектной модели компонента (COM). Несмотря на то, что существующий объект повторно используется, при каждом извлечении объекта создается новый указатель интерфейса, поэтому количество ссылок должно быть отложено.

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.