155 lines
3.1 KiB
C++
155 lines
3.1 KiB
C++
/****************************************************************************
|
|
*
|
|
* UNMARSH.CPP
|
|
*
|
|
* unmarshalling stub
|
|
*
|
|
* Copyright (c) 1992 Microsoft Corporation. All Rights Reserved.
|
|
*
|
|
* You have a royalty-free right to use, modify, reproduce and
|
|
* distribute the Sample Files (and/or any modified version) in
|
|
* any way you find useful, provided that you agree that
|
|
* Microsoft has no warranty obligations or liability for any
|
|
* Sample Application Files which are modified.
|
|
*
|
|
***************************************************************************/
|
|
|
|
#include <win32.h>
|
|
#include <storage.h>
|
|
#include <avifmt.h>
|
|
#include "avifile.h"
|
|
#include "avifilei.h"
|
|
#include "unmarsh.h"
|
|
#include "debug.h"
|
|
|
|
|
|
HRESULT CUnMarshal::Create(
|
|
IUnknown FAR* pUnknownOuter,
|
|
const IID FAR& riid,
|
|
void FAR* FAR* ppv)
|
|
{
|
|
IUnknown FAR* pUnknown;
|
|
CUnMarshal FAR* pUnMarshal;
|
|
HRESULT hresult;
|
|
|
|
DPF("Creating Simple UnMarshal Instance....\n");
|
|
pUnMarshal = new FAR CUnMarshal(pUnknownOuter, &pUnknown);
|
|
if (!pUnMarshal)
|
|
return ResultFromScode(E_OUTOFMEMORY);
|
|
hresult = pUnknown->QueryInterface(riid, ppv);
|
|
if (FAILED(GetScode(hresult)))
|
|
delete pUnMarshal;
|
|
return hresult;
|
|
}
|
|
|
|
CUnMarshal::CUnMarshal(
|
|
IUnknown FAR* pUnknownOuter,
|
|
IUnknown FAR* FAR* ppUnknown)
|
|
{
|
|
if (pUnknownOuter)
|
|
m_pUnknownOuter = pUnknownOuter;
|
|
else
|
|
m_pUnknownOuter = this;
|
|
*ppUnknown = this;
|
|
}
|
|
|
|
STDMETHODIMP CUnMarshal::QueryInterface(
|
|
const IID FAR& iid,
|
|
void FAR* FAR* ppv)
|
|
{
|
|
if (iid == IID_IUnknown)
|
|
*ppv = this;
|
|
else if (iid == IID_IMarshal) {
|
|
*ppv = this;
|
|
} else
|
|
return ResultFromScode(E_NOINTERFACE);
|
|
AddRef();
|
|
return NULL;
|
|
}
|
|
|
|
/* - - - - - - - - */
|
|
|
|
STDMETHODIMP_(ULONG) CUnMarshal::AddRef()
|
|
{
|
|
uUseCount++;
|
|
return ++m_refs;
|
|
}
|
|
|
|
|
|
|
|
STDMETHODIMP_(ULONG) CUnMarshal::Release()
|
|
{
|
|
uUseCount--;
|
|
if (!--m_refs) {
|
|
|
|
delete this;
|
|
return 0;
|
|
}
|
|
return m_refs;
|
|
}
|
|
|
|
|
|
// *** IMarshal methods ***
|
|
STDMETHODIMP CUnMarshal::GetUnmarshalClass (THIS_ REFIID riid, LPVOID pv,
|
|
DWORD dwDestContext, LPVOID pvDestContext,
|
|
DWORD mshlflags, LPCLSID pCid)
|
|
{
|
|
HRESULT hr = NOERROR;
|
|
|
|
return hr;
|
|
}
|
|
|
|
STDMETHODIMP CUnMarshal::GetMarshalSizeMax (THIS_ REFIID riid, LPVOID pv,
|
|
DWORD dwDestContext, LPVOID pvDestContext,
|
|
DWORD mshlflags, LPDWORD pSize)
|
|
{
|
|
HRESULT hr = NOERROR;
|
|
|
|
return hr;
|
|
}
|
|
|
|
STDMETHODIMP CUnMarshal::MarshalInterface (THIS_ LPSTREAM pStm, REFIID riid,
|
|
LPVOID pv, DWORD dwDestContext, LPVOID pvDestContext,
|
|
DWORD mshlflags)
|
|
{
|
|
HRESULT hr = NOERROR;
|
|
|
|
return hr;
|
|
}
|
|
|
|
STDMETHODIMP CUnMarshal::UnmarshalInterface (THIS_ LPSTREAM pStm, REFIID riid,
|
|
LPVOID FAR* ppv)
|
|
{
|
|
HRESULT hr;
|
|
IUnknown FAR * punk;
|
|
|
|
hr = pStm->Read(&punk,sizeof(punk),NULL);
|
|
|
|
DPF("Unmarshalling %08lx\n", (DWORD) (LPVOID) punk);
|
|
|
|
if (hr == NOERROR) {
|
|
hr = punk->QueryInterface(riid, ppv);
|
|
|
|
if (hr == NOERROR)
|
|
punk->Release();
|
|
}
|
|
|
|
return hr;
|
|
}
|
|
|
|
STDMETHODIMP CUnMarshal::ReleaseMarshalData (THIS_ LPSTREAM pStm)
|
|
{
|
|
HRESULT hr = NOERROR;
|
|
|
|
return hr;
|
|
}
|
|
|
|
STDMETHODIMP CUnMarshal::DisconnectObject (THIS_ DWORD dwReserved)
|
|
{
|
|
HRESULT hr = NOERROR;
|
|
|
|
return hr;
|
|
}
|
|
|
|
|