IMARSHAL.CPP
/* 
 * IMARSHAL.CPP 
 * 
 * Template IMarshal 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 "imarshal.h" 
 
 
 
/* 
 * CImpIMarshal::CImpIMarshal 
 * CImpIMarshal::~CImpIMarshal 
 * 
 * Parameters (Constructor): 
 *  pObj            LPVOID of the object we're in. 
 *  pUnkOuter       LPUNKNOWN to which we delegate. 
 */ 
 
CImpIMarshal::CImpIMarshal(LPVOID pObj, LPUNKNOWN pUnkOuter) 
    { 
    m_cRef=0; 
    m_pObj=pObj; 
    m_pUnkOuter=pUnkOuter; 
    return; 
    } 
 
CImpIMarshal::~CImpIMarshal(void) 
    { 
    return; 
    } 
 
 
 
/* 
 * CImpIMarshal::QueryInterface 
 * CImpIMarshal::AddRef 
 * CImpIMarshal::Release 
 * 
 * Purpose: 
 *  Delegating IUnknown members for CImpIMarshal. 
 */ 
 
STDMETHODIMP CImpIMarshal::QueryInterface(REFIID riid 
    , LPVOID *ppv) 
    { 
    return m_pUnkOuter->QueryInterface(riid, ppv); 
    } 
 
 
STDMETHODIMP_(ULONG) CImpIMarshal::AddRef(void) 
    { 
    ++m_cRef; 
    return m_pUnkOuter->AddRef(); 
    } 
 
STDMETHODIMP_(ULONG) CImpIMarshal::Release(void) 
    { 
    --m_cRef; 
    return m_pUnkOuter->Release(); 
    } 
 
 
 
 
 
 
 
 
 
/* 
 * CImpIMarshal::GetUnmarshalClass 
 * 
 * Purpose: 
 *  Determines the class of object to be used to create an 
 *  uninitalized proxy in the unmarshaling process. 
 * 
 * Parameters: 
 *  riid            REFIID of the interface to be marshaled. 
 *  pv              LPVOID to the interface to be marshaled. 
 *  dwCtx           DWORD specifying the relation of the processes 
 *                  between which the marshaling is occuring, from the 
 *                  MSHCTX enumeration. 
 *  pvCtx           LPVOID Reserved for future MSHCTX values. 
 *  dwFlags         DWORD specifying why marshaling is taking place. 
 *  pClsID          LPCLSID in which to store the proxy CLSID. 
 * 
 * Return Value: 
 *  HRESULT         NOERROR or a general error value. 
 */ 
 
 
STDMETHODIMP CImpIMarshal::GetUnmarshalClass(REFIID riid 
    , LPVOID pv, DWORD dwCtx, LPVOID pvCtx, DWORD dwFlags 
    , LPCLSID pClsID) 
    { 
    return E_NOTIMPL; 
    } 
 
 
 
 
 
 
/* 
 * CImpIMarshal::GetMarshalSizeMax 
 * 
 * Purpose: 
 *  Returns the upper memory bound needed to write data into a stream 
 *  for IMarshal::MarshalInterface. 
 * 
 * Parameters: 
 *  riid            REFIID of the interface to be marshaled. 
 *  pv              LPVOID of the interface to be marshaled. 
 *  dwDestCtx       DWORD with the destination context from MSHCTX. 
 *  pvDestCtx       LPVOID reserved for future MSHCTX flags. 
 *  dwFlags         DWORD specifying why marshaling is taking place. 
 *  pdwSize         LPDWORD in which the size is returned. 
 * 
 * Return Value: 
 *  HRESULT         NOERROR or a general error value. 
 */ 
 
 
STDMETHODIMP CImpIMarshal::GetMarshalSizeMax(REFIID riid, LPVOID pv 
    , DWORD dwDestCtx, LPVOID pvDestCtx, DWORD dwFlags 
    , LPDWORD pdwSize) 
    { 
    return E_NOTIMPL; 
    } 
 
 
 
 
 
/* 
 * CImpIMarshal::MarshalInterface 
 * 
 * Purpose: 
 *  Marshals an interface ID into a stream. 
 * 
 * Parameters: 
 *  pStm            LPSTREAM into which to marshal the interface. 
 *  riid            REFIID of the interface to be marshaled. 
 *  pv              LPVOID of the interface to be marshaled. 
 *  dwDestCtx       DWORD with the destination context from MSHCTX. 
 *  pvDestCtx       LPVOID reserved for future MSHCTX flags. 
 *  dwFlags         DWORD specifying why marshaling is taking place. 
 * 
 * Return Value: 
 *  HRESULT         NOERROR or a general error value. 
 */ 
 
 
STDMETHODIMP CImpIMarshal::MarshalInterface(LPSTREAM pstm 
    , REFIID riid, LPVOID pv, DWORD dwDestCtx, LPVOID pvDestCtx 
    , DWORD dwFlags) 
    { 
    return E_NOTIMPL; 
    } 
 
 
 
 
 
/* 
 * CImpIMarshal::UnmarshalInterface 
 * 
 * Purpose: 
 *  Initializes a newly created proxy from a stream stored in 
 *  MarshalInterface. 
 * 
 * Parameters: 
 *  pStm            LPSTREAM to the stream containing marshal 
 *                  data. 
 *  riid            REFIID of the interface to be marshaled. 
 *  pv              LPVOID of the interface to be marshaled. 
 * 
 * Return Value: 
 *  HRESULT         NOERROR or a general error value. 
 */ 
 
 
STDMETHODIMP CImpIMarshal::UnmarshalInterface(LPSTREAM pstm 
    , REFIID riid, LPVOID *pv) 
    { 
    return E_NOTIMPL; 
    } 
 
 
 
 
 
 
/* 
 * CImpIMarshal::ReleaseMarshalData 
 * 
 * Purpose: 
 *  Destroy a marshaled data packet. 
 * 
 * Parameters: 
 *  pStm            LPSTREAM containing the data to release. 
 * 
 * Return Value: 
 *  HRESULT         NOERROR or a general error value. 
 */ 
 
 
STDMETHODIMP CImpIMarshal::ReleaseMarshalData(LPSTREAM pstm) 
    { 
    return E_NOTIMPL; 
    } 
 
 
 
 
 
 
/* 
 * CImpIMarshal::Disconnect 
 * 
 * Purpose: 
 *  Instructs an object with custom marshaling that it's being 
 *  disconnected. 
 * 
 * Parameters: 
 *  dwReserved      DWORD reserved. 
 * 
 * Return Value: 
 *  HRESULT         NOERROR or a general error value. 
 */ 
 
 
STDMETHODIMP CImpIMarshal::DisconnectObject(DWORD dwReserved) 
    { 
    return E_NOTIMPL; 
    }