summaryrefslogblamecommitdiffstats
path: root/private/oleutest/dll/oleimpl.hxx
blob: f472c427332324b17635fc8c555b27b6796b40fd (plain) (tree)

















































































































































































































































                                                                               
//+-------------------------------------------------------------------
//
//  File:       oleimpl.hxx
//
//  Contents:   This file contins the DLL entry points
//                      LibMain
//                      DllGetClassObject (Bindings key func)
//                      DllCanUnloadNow
//                      CBasicBndCF (class factory)
//  History:	30-Mar-92      SarahJ      Created
//              31-Dec-93      ErikGav     Chicago port
//
//---------------------------------------------------------------------

#ifndef __OLEIMPL_H__
#define __OLEIMPL_H__


#define STGM_DFRALL (STGM_READWRITE | STGM_TRANSACTED | STGM_SHARE_DENY_WRITE)

//+---------------------------------------------------------------------------
//
//  Function:   operator new, public
//
//  Synopsis:   Global operator new which does not throw exceptions.
//
//  Arguments:  [size] -- Size of the memory to allocate.
//
//  Returns:	A pointer to the allocated memory.  Is *NOT* initialized to 0!
//
//  Notes:	We override new to make delete easier.
//
//----------------------------------------------------------------------------

inline void* _CRTAPI1
operator new (size_t size)
{
    return(CoTaskMemAlloc(size));
}

//+-------------------------------------------------------------------------
//
//  Function:	::operator delete
//
//  Synopsis:	Free a block of memory
//
//  Arguments:	[lpv] - block to free.
//
//--------------------------------------------------------------------------

inline void _CRTAPI1 operator delete(void FAR* lpv)
{
    CoTaskMemFree(lpv);
}


//
//   Define the interface we are going to use here - avoiding MIDL stuff
//

//+-------------------------------------------------------------------
//
//  Class:    CBasicBndCF
//
//  Synopsis: Class Factory for CBasicBnd
//
//  Methods:  IUnknown      - QueryInterface, AddRef, Release
//            IClassFactory - CreateInstance
//
//  History:  21-Mar-92  SarahJ  Created
//
//--------------------------------------------------------------------


class FAR CBasicBndCF: public IClassFactory
{
public:

    // Constructor/Destructor
    CBasicBndCF();
    ~CBasicBndCF();

    // IUnknown
    STDMETHODIMP QueryInterface(REFIID iid, void FAR * FAR * ppv);
    STDMETHODIMP_(ULONG) AddRef(void);
    STDMETHODIMP_(ULONG) Release(void);


    // IClassFactory
    STDMETHODIMP CreateInstance(IUnknown FAR* pUnkOuter,
	                        REFIID iidInterface,
				void FAR* FAR* ppv);

    STDMETHODIMP LockServer(BOOL fLock);

    BOOL ReleaseClass(void);

private:

    ULONG		_cRefs;
};



//+-------------------------------------------------------------------
//
//  Class:    CBasicBnd
//
//  Synopsis: Test class CBasicBnd
//
//  Methods:
//
//  History:  21-Mar-92  SarahJ  Created
//
//--------------------------------------------------------------------


class FAR CBasicBnd: public IPersistFile, public IOleClientSite,
    public IOleObject, public IOleItemContainer
{
public:
// Constructor/Destructor
	CBasicBnd(IUnknown *punk);
	~CBasicBnd();

// IUnknown
    STDMETHODIMP QueryInterface(REFIID iid, void FAR * FAR * ppv);
    STDMETHODIMP_(ULONG) AddRef(void);
    STDMETHODIMP_(ULONG) Release(void);

//   IPersist - needed 'cause IPersistFile inherits from this
     STDMETHODIMP GetClassID(LPCLSID lpClassID);


//  IPersitFile
     STDMETHODIMP IsDirty();
     STDMETHODIMP Load(LPCWSTR lpszFileName, DWORD grfMode);
     STDMETHODIMP Save(LPCWSTR lpszFileName, BOOL fRemember);
     STDMETHODIMP SaveCompleted(LPCWSTR lpszFileName);
     STDMETHODIMP GetCurFile(LPWSTR FAR * lplpszFileName);

    // *** IOleObject methods ***
    STDMETHODIMP SetClientSite( LPOLECLIENTSITE pClientSite);
    STDMETHODIMP GetClientSite( LPOLECLIENTSITE FAR* ppClientSite);
    STDMETHODIMP SetHostNames( LPCWSTR szContainerApp, LPCWSTR szContainerObj);
    STDMETHODIMP Close(DWORD dwSaveOption);
    STDMETHODIMP SetMoniker( DWORD dwWhichMoniker, LPMONIKER pmk);
    STDMETHODIMP GetMoniker( DWORD dwAssign, DWORD dwWhichMoniker,
				LPMONIKER FAR* ppmk);
    STDMETHODIMP InitFromData( LPDATAOBJECT pDataObject,
				BOOL fCreation,
				DWORD dwReserved);
    STDMETHODIMP GetClipboardData( DWORD dwReserved,
				LPDATAOBJECT FAR* ppDataObject);
    STDMETHODIMP DoVerb( LONG iVerb,
                LPMSG lpmsg,
                LPOLECLIENTSITE pActiveSite,
		LONG lindex,
		HWND hwndParent,
		LPCRECT lprcPosRect);
    STDMETHODIMP EnumVerbs(LPENUMOLEVERB FAR* ppenumOleVerb);
    STDMETHODIMP Update(void);
    STDMETHODIMP IsUpToDate(void);
    STDMETHODIMP GetUserClassID(CLSID FAR *pClsid);
    STDMETHODIMP GetUserType(DWORD dwFormOfType, LPWSTR FAR* pszUserType);
    STDMETHODIMP SetExtent( DWORD dwDrawAspect, LPSIZEL lpsizel);
    STDMETHODIMP GetExtent( DWORD dwDrawAspect, LPSIZEL lpsizel);

    STDMETHODIMP Advise( LPADVISESINK pAdvSink, DWORD FAR* pdwConnection);
    STDMETHODIMP Unadvise( DWORD dwConnection);
    STDMETHODIMP EnumAdvise( LPENUMSTATDATA FAR* ppenumAdvise);
    STDMETHODIMP GetMiscStatus(DWORD dwAspect, DWORD FAR* pdwStatus);
    STDMETHODIMP SetColorScheme( LPLOGPALETTE lpLogpal);

    // *** IParseDisplayName method ***
    STDMETHODIMP ParseDisplayName(
	LPBC pbc,
	LPWSTR lpszDisplayName,
	ULONG FAR* pchEaten,
	LPMONIKER FAR* ppmkOut) ;

    // *** IOleContainer methods ***
    STDMETHODIMP EnumObjects(DWORD grfFlags, LPENUMUNKNOWN FAR* ppenumUnknown);
    STDMETHODIMP LockContainer(BOOL fLock);

    // *** IOleItemContainer methods ***
    STDMETHODIMP GetObject(
	LPWSTR lpszItem,
	DWORD dwSpeedNeeded,
	LPBINDCTX pbc,
	REFIID riid,
	LPVOID FAR* ppvObject);

    STDMETHODIMP GetObjectStorage(
	LPWSTR lpszItem,
	LPBINDCTX pbc,
	REFIID riid,
	LPVOID FAR* ppvStorage);

    STDMETHODIMP IsRunning(LPWSTR lpszItem) ;

    // IOleClientSite
    STDMETHODIMP SaveObject	(void);
    STDMETHODIMP GetContainer	(LPOLECONTAINER FAR *ppContainer);
    STDMETHODIMP ShowObject	(void);
    STDMETHODIMP OnShowWindow	(BOOL fShow);
    STDMETHODIMP RequestNewObjectLayout (void);

private:

    IUnknown *		_punk;

    IMoniker *		_pmkContainer;

    IStorage *		_psStg1;

    IStorage *		_psStg2;
};


class CUnknownBasicBnd : public IUnknown
{
public:

			CUnknownBasicBnd(IUnknown *punk);

			~CUnknownBasicBnd(void);

    // IUnknown
    STDMETHODIMP	QueryInterface(REFIID iid, void FAR * FAR * ppv);
    STDMETHODIMP_(ULONG) AddRef(void);
    STDMETHODIMP_(ULONG) Release(void);

private:

    CBasicBnd *		_pbasicbnd;

    ULONG		_cRefs;
};


#endif