text: //+-------------------------------------------------------------------------
  //
  //  Microsoft Windows
  //  Copyright (C) Microsoft Corporation, 1992 - 1992.
  //
  //  File:	cqi.cxx
  //
  //  Contents:	implementations for QueryInterface test
  //
  //  Functions:
  //		CQI::CQI
  //		CQI::~CQI
  //		CQI::QueryInterface
  //		CQI::GetClassForHandler
  //
  //  History:	06-Aug-92 Rickhi    Created
  //
  //--------------------------------------------------------------------------
  #include    <pch.cxx>
  #pragma     hdrstop
  #include    <cqi.hxx>	 //	class definition
  
  //+-------------------------------------------------------------------------
  //
  //  Method:	CQI::CQI
  //
  //  Synopsis:	Creates an instance of CQI
  //
  //  History:	06-Aug-92 Rickhi    Created
  //
  //--------------------------------------------------------------------------
  CQI::CQI(REFCLSID rclsid) : _clsid(rclsid)
  {
      Display(TEXT("CQI created.\n"));
      GlobalRefs(TRUE);
  
      ENLIST_TRACKING(CQI);
  }
  
  //+-------------------------------------------------------------------------
  //
  //  Method:	CQI::~CQI
  //
  //  Synopsis:	Cleans up object
  //
  //  History:	06-Aug-92 Rickhi    Created
  //
  //--------------------------------------------------------------------------
  CQI::~CQI(void)
  {
      Display(TEXT("CQI deleted.\n"));
      GlobalRefs(FALSE);
  
      //	automatic actions are enough
  }
  
  //+-------------------------------------------------------------------------
  //
  //  Method:	CQI::QueryInterface
  //
  //  Synopsis:	returns ptr to requested interface.
  //
  //		DANGER: this returns SUCCESS on almost every interface,
  //		though the only valid methods on any interface are IUnknown
  //		and IStdMarshalInfo.
  //
  //  Arguments:	[riid] - interface instance requested
  //		[ppv]  - where to put pointer to interface instance
  //
  //  Returns:	S_OK or E_NOINTERFACE
  //
  //  History:	06-Aug-92 Rickhi    Created
  //
  //--------------------------------------------------------------------------
  STDMETHODIMP CQI::QueryInterface(REFIID riid, void **ppv)
  {
      if (IsEqualIID(riid, IID_IStdMarshalInfo))
      {
  	if (IsEqualCLSID(_clsid, CLSID_QIHANDLER))
  	{
  	    *ppv = (IStdMarshalInfo *)this;
  	    AddRef();
  	    return S_OK;
  	}
      }
  
      if (IsEqualIID(riid,IID_IUnknown) ||
  	IsEqualIID(riid,IID_IAdviseSink) ||
  	IsEqualIID(riid,IID_IDataObject) ||
  	IsEqualIID(riid,IID_IOleObject) ||
  	IsEqualIID(riid,IID_IOleClientSite) ||
  	IsEqualIID(riid,IID_IParseDisplayName) ||
  	IsEqualIID(riid,IID_IPersistStorage) ||
  	IsEqualIID(riid,IID_IPersistFile) ||
  	IsEqualIID(riid,IID_IStorage) ||
  	IsEqualIID(riid,IID_IOleContainer) ||
  	IsEqualIID(riid,IID_IOleItemContainer) ||
  	IsEqualIID(riid,IID_IOleInPlaceSite) ||
  	IsEqualIID(riid,IID_IOleInPlaceActiveObject) ||
  	IsEqualIID(riid,IID_IOleInPlaceObject) ||
  	IsEqualIID(riid,IID_IOleInPlaceUIWindow) ||
  	IsEqualIID(riid,IID_IOleInPlaceFrame) ||
  	IsEqualIID(riid,IID_IOleWindow))
      {
  	*ppv = (void *)(IUnknown *) this;
  	AddRef();
  	return S_OK;
      }
  
      *ppv = NULL;
      return E_NOINTERFACE;
  }
  
  //+-------------------------------------------------------------------------
  //
  //  Method:	CQI::GetClassForHandler
  //
  //  Synopsis:	returns the classid for the inproc handler of this object.
  //		Used to test handler marshaling.
  //
  //  History:	06-Aug-92 Rickhi    Created
  //
  //--------------------------------------------------------------------------
  STDMETHODIMP CQI::GetClassForHandler(DWORD dwDestContext,
  				     void *pvDestContext,
  				     CLSID *pClsid)
  {
      *pClsid = CLSID_QIHANDLER;
      return S_OK;
  }
  