summaryrefslogblamecommitdiffstats
path: root/private/oleutest/balls/common/cqisrv.cxx
blob: 2132080ccbf3867749c40763b7e09a5982879b38 (plain) (tree)

































































































































                                                                            
//+-------------------------------------------------------------------------
//
//  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;
}