IMONIKER.CPP

/* 
* IMONIKER.CPP
*
* Template IMoniker interface implementation.
*
* Copyright (c)1993-1996 Microsoft Corporation, All Rights Reserved
*
* Kraig Brockschmidt, Software Design Engineer
* Microsoft Systems Developer Relations
*
* Internet : kraigb@microsoft.com
* Compuserve: >INTERNET:kraigb@microsoft.com
*/


#include "imoniker.h"



/*
* CImpIMoniker::CImpIMoniker
* CImpIMoniker::~CImpIMoniker
*
* Parameters (Constructor):
* pObj LPVOID of the object we're in.
* pUnkOuter LPUNKNOWN to which we delegate.
*/

CImpIMoniker::CImpIMoniker(LPVOID pObj, LPUNKNOWN pUnkOuter)
{
m_cRef=0;
m_pObj=pObj;
m_pUnkOuter=pUnkOuter;
return;
}

CImpIMoniker::~CImpIMoniker(void)
{
return;
}



/*
* CImpIMoniker::QueryInterface
* CImpIMoniker::AddRef
* CImpIMoniker::Release
*
* Purpose:
* Delegating IUnknown members for CImpIMoniker.
*/

STDMETHODIMP CImpIMoniker::QueryInterface(REFIID riid
, LPVOID *ppv)
{
return m_pUnkOuter->QueryInterface(riid, ppv);
}


STDMETHODIMP_(ULONG) CImpIMoniker::AddRef(void)
{
++m_cRef;
return m_pUnkOuter->AddRef();
}

STDMETHODIMP_(ULONG) CImpIMoniker::Release(void)
{
--m_cRef;
return m_pUnkOuter->Release();
}







/*
* CImpIMoniker::GetClassID
*
* Purpose:
* Return the CLSID of the moniker.
*
* Parameters:
* pClsID LPCLSID in which to store the CLSID.
*
* Return Value:
* HRESULT NOERROR or a general error value.
*/

STDMETHODIMP CImpIMoniker::GetClassID(LPCLSID pClsID)
{
return E_NOTIMPL;
}





/*
* CImpIMoniker::IsDirty
*
* Purpose:
* Answers whether the state of the moniker itself is dirty.
*
* Parameters:
* None
*
* Return Value:
* HRESULT S_TRUE if the moniker is dirty, S_FALSE if not.
* Possibly a failure code.
*/

STDMETHODIMP CImpIMoniker::IsDirty(void)
{
return E_NOTIMPL;
}





/*
* CImpIMoniker::Load
*
* Purpose:
* Initializes the moniker from the information in a stream.
*
* Parameters:
* pstm LPSTREAM containing the moniker's information.
*
* Return Value:
* HRESULT NOERROR or a general error value.
*/

STDMETHODIMP CImpIMoniker::Load(LPTSTREAM pstm)
{
return E_NOTIMPL;
}





/*
* CImpIMoniker::Save
*
* Purpose:
* Instructs the moniker to save its state to a stream.
*
* Parameters:
* pstm LPSTREAM in which to save the moniker.
* fClearDirty BOOL indicating if the object is to clear its
* dirty flag after the save.
*
* Return Value:
* HRESULT NOERROR or a general error value.
*/

STDMETHODIMP CImpIMoniker::Save(LPTSTREAM pstm, BOOL fClearDirty)
{
return E_NOTIMPL;
}






/*
* CImpIMoniker::GetSizeMax
*
* Purpose:
* Returns the size of a stream the moniker need to store its
* persistent state.
*
* Parameters:
* pcbSize ULARGE_INTEGER * in which to store the size.
*
* Return Value:
* HRESULT NOERROR or a general error value.
*/

STDMETHODIMP CImpIMoniker::GetSizeMax(ULARGE_INTEGER *pcbSize)
{
return E_NOTIMPL;
}






/*
* CImpIMoniker::BindToObject
*
* Purpose:
* Instructs a moniker to locate and load the object it refereces.
*
* Parameters:
* pBindCtx LPBC to the bind context.
* pmkLeft LPMONIKER to the "left" of this moniker.
* riid REFIID of the interface desired on the object
* ppvObj LPVOID * into which to store the bound object's
* interface pointer.
*
* Return Value:
* HRESULT NOERROR or a general error value.
*/

STDMETHODIMP CImpIMoniker::BindToObject(LPBC pBindCtx
, LPMONIKER pmkLeft, REFIID riid, LPVOID *ppvObj)
{
return E_NOTIMPL;
}






/*
* CImpIMoniker::BindToStorage
*
* Purpose:
* Locates and returns an interface pointer to the storage of
* the object referenced by this moniker.
*
* Parameters:
* pBindCtx LPBC to the bind context.
* pmkLeft LPMONIKER to the "left" of this moniker.
* riid REFIID of the interface desired on the object
* ppvObj LPVOID * into which to store the bound object's
* interface pointer.
*
* Return Value:
* HRESULT NOERROR or a general error value.
*/

STDMETHODIMP CImpIMoniker::BindToStorage(LPBC pBindCtx
, LPMONIKER pmkLeft, REFIID riid, LPVOID *ppvObj)
{
return E_NOTIMPL;
}






/*
* CImpIMoniker::Reduce
*
* Purpose:
* Returns a more or equally efficient moniker equivalent to
* this moniker.
*
* Parameters:
* pBindCtx LPBC to the bind context.
* dwHowFar DWORD indicating how far the reduction should go.
* ppmkLeft LPMONIKER * (in-out) contains initial left moniker
* on input and a new prefix on output (if necessary).
* ppmkReduced LPMONIKER * into which to store the reduced moniker.
*
* Return Value:
* HRESULT NOERROR or a general error value.
*/

STDMETHODIMP CImpIMoniker::Reduce(LPBC pBindCtx, DWORD dwHowFar
, LPMONIKER *ppmkLeft, LPMONIKER *ppmkReduced)
{
return E_NOTIMPL;
}






/*
* CImpIMoniker::ComposeWith
*
* Purpose:
* Returns a new composite moniker composed with this moniker on
* the left and ppmkRight on the right.
*
* Parameters:
* pmkRight LPMONIKER of the moniker to store on the right.
* fOnlyIfNotGen BOOL that contrls what should be done if the
* result is not a generic composite.
* ppmkComposite LPMONIKER * in which to store the resulting
* composite.
*
* Return Value:
* HRESULT NOERROR or a general error value.
*/

STDMETHODIMP CImpIMoniker::ComposeWith(LPMONIKER pmkRight
, BOOL fOnlyIfNotGen, LPMONIKER *ppmkComposite)
{
return E_NOTIMPL;
}






/*
* CImpIMoniker::Enum
*
* Purpose:
* Enumerates the monikers within this moniker if we are a
* composite. Need not be implemented for simple monikers.
*
* Parameters:
* fForward Specifies the direction of enumeration, TRUE
* for forward, FALSE for backwards.
* ppEnum LPENUMMONIKER * in which to store the
* enumerator's IEnumMoniker interface.
*
* Return Value:
* HRESULT NOERROR or a general error value.
*/

STDMETHODIMP CImpIMoniker::Enum(BOOL fForward, LPENUMMONIKER *ppEnum)
{
return E_NOTIMPL;
}






/*
* CImpIMoniker::IsEqual
*
* Purpose:
* Compares this moniker to another for equivalence.
*
* Parameters:
* pmk LPMONKIER to the other moniker to compare.
*
* Return Value:
* HRESULT S_OK or S_FALSE depending on the result of
* the comparison.
*/

STDMETHODIMP CImpIMoniker::IsEqual(LPMONIKER pmk)
{
return E_NOTIMPL;
}






/*
* CImpIMoniker::Hash
*
* Purpose:
* Returns a 32-bit integer associated with this moniker that
* can be used in creating moniker tables. This should only rely
* on the internal state of the moniker and not any memory
* addresses.
*
* Parameters:
* pdwHash LPDWORD in which to store the hash number.
*
* Return Value:
* HRESULT NOERROR or a general error value.
*/

STDMETHODIMP CImpIMoniker::Hash(LPDWORD pdwHash)
{
return E_NOTIMPL;
}






/*
* CImpIMoniker::IsRunning
*
* Purpose:
* Tests if the object associated with this moniker is already
* running.
*
* Parameters:
* pBindCtx LPBINDCTX to the bind context in use.
* pmkLeft LPMONIKER to the left.
* pmkNewlyRunning LPMONIKER most recently added to the running
* object table (can be NULL). If equivalent to
* this moniker then the object is already running.
*
* Return Value:
* HRESULT S_OK or S_FALSE (or an error code)
*/

STDMETHODIMP CImpIMoniker::IsRunning(LPBC pBindCtx
, LPMONIKER pmkLeft, LPMONIKER pmkNewlyRunning)
{
return E_NOTIMPL;
}






/*
* CImpIMoniker::GetTimeOfLastChange
*
* Purpose:
* Reports the time that the object referenced by this moniker,
* such as a file, changed.
*
* Parameters:
* pBindCtx LPBINDCTX to the bind context in use.
* pmkLeft LPMONIKER to the left.
* pTime FILETIME * in which to store the last change
* time and date information.
*
* Return Value:
* HRESULT NOERROR or a general error value.
*/

STDMETHODIMP CImpIMoniker::GetTimeOfLastChange(LPBC pBindCtx
, LPMONIKER pmkLeft, FILETIME *pTime)
{
return E_NOTIMPL;
}






/*
* CImpIMoniker::Inverse
*
* Purpose:
* Creates an inverse of this moniker such that a composite
* containing this moniker and its inverse to the right would
* annihilate each other.
*
* Parameters:
* ppmkInverse LPMONIKER * in which to store the inverse.
*
* Return Value:
* HRESULT NOERROR or a general error value.
*/

STDMETHODIMP CImpIMoniker::Inverse(LPMONIKER *)
{
return E_NOTIMPL;
}






/*
* CImpIMoniker::CommonPrefixWith
*
* Purpose:
* Determines if this moniker and another have a common prefix
* (left elements) that can be separated out into another
* moniker.
*
* Parameters:
* pmk LPMONIKER to the other moniker.
* ppmkPrefix LPMONIKER * in which to store the prefix moniker
* if there is one, otherwise receives NULL.
*
* Return Value:
* HRESULT NOERROR or a general error value.
*/

STDMETHODIMP CImpIMoniker::CommonPrefixWith(LPMONIKER, LPMONIKER *)
{
return E_NOTIMPL;
}





/*
* CImpIMoniker::RelativePathTo
*
* Purpose:
* Returns another moniker that contains the relative path between
* this moniker and another.
*
* Parameters:
* pmk LPMONIKER of the other moniker.
* ppmkRelative LPMONIKER * in which to store a moniker that
* contains the relative path.
*
* Return Value:
* HRESULT NOERROR or a general error value.
*/

STDMETHODIMP CImpIMoniker::RelativePathTo(LPMONIKER, LPMONIKER *)
{
return E_NOTIMPL;
}





/*
* CImpIMoniker::GetDisplayName
*
* Purpose:
* Returns a human-readable name suitable for display of this
* moniker.
*
* Parameters:
* pBindCtx LPBC to the current bind context.
* pmkLeft LPMONIKER to the left.
* ppszName LPTSTR * in which to store the display name.
* Output can be NULL if there is no name.
*
* Return Value:
* HRESULT NOERROR or a general error value.
*/

STDMETHODIMP CImpIMoniker::GetDisplayName(LPBC, LPMONIKER, LPTSTR *)
{
return E_NOTIMPL;
}





/*
* CImpIMoniker::ParseDisplayName
*
* Purpose:
* Pparses the moniker's remaining display name. The pszDisplayName
* parameter is the yet-to-be-parsed tail of the display name. This
* function parses as much of the remaining tail as is appropriate
* for a display name within the object identified by
* (pmkToLeft * (the receiver)) and returns the corresponding
* moniker.
*
* Parameters:
* pBindCtx LPBC to the current bind context.
* pmkLeft LPMONIKER to the left.
* pszDisplayName LPTSTR to the display name to be parsed.
* pchEaten ULONG * with the number of characters of the
* input name this parse consumed.
* ppmkOut LPMONIKER in whic to store the resulting
* moniker.
*
*
* Return Value:
* HRESULT NOERROR or a general error value.
*/

STDMETHODIMP CImpIMoniker::ParseDisplayName(LPBC pBindCtx
, LPMONIKER pmkLeft, LPTSTR pszDisplayName, ULONG *pchEaten
, LPMONIKER *ppmkOut)
{
return E_NOTIMPL;
}





/*
* CImpIMoniker::IsSystemMoniker
*
* Purpose:
* Returns whether or not this is a system-implemented moniker
* whose implemented semantics are important for the binding
* process.
*
* Parameters:
* pdwType LPDWORD in which to return the system moniker
* type, from the MKSYS enumeration if S_OK is
* returned.
*
* Return Value:
* HRESULT S_OK or S_FALSE.
*/

STDMETHODIMP CImpIMoniker::IsSystemMoniker(LPDWORD)
{
return E_NOTIMPL;
}