|
|
//+--------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1992 - 1996.
//
// File: wrap.cxx
//
// Contents: Wrapper implementations
//
//---------------------------------------------------------------
#include "headers.cxx"
// Retrieve interface pointer for possibly NULL objects
#define SAFEI(obj) ((obj) ? (obj)->GetI() : NULL)
//+--------------------------------------------------------------
//
// IStorage wrappers
//
//---------------------------------------------------------------
WStorage *WStorage::Wrap(IStorage *pistg) { WStorage *wstg;
wstg = new WStorage(pistg); if (wstg == NULL) error(EXIT_OOM, "Unable to wrap IStorage\n"); return wstg; }
WStorage::WStorage(IStorage *pstg) { // Note: takes ownership of pstg
_pstg = pstg; }
WStorage::~WStorage(void) { if (_pstg) Release(); }
void WStorage::Unwrap(void) { delete this; }
HRESULT WStorage::QueryInterface(REFIID riid, void **ppvObj) { out("IStorage %p::QueryInterface(riid, %p)", _pstg, ppvObj); return Result(_pstg->QueryInterface(riid, ppvObj)); }
ULONG WStorage::AddRef(void) { ULONG ul;
ul = _pstg->AddRef(); out("IStorage %p::AddRef() - %lu\n", _pstg, ul); return ul; }
ULONG WStorage::Release(void) { ULONG ul;
ul = _pstg->Release(); out("IStorage %p::Release() - %lu\n", _pstg, ul); if (ul == 0) _pstg = NULL; return ul; }
HRESULT WStorage::CreateStream(const OLECHAR * pwcsName, const DWORD grfMode, DWORD reserved1, DWORD reserved2, WStream **ppstm) { HRESULT hr; IStream *pistm;
out("IStorage %p::CreateStream(%s, 0x%lX, %lu, %lu, %p)", _pstg, OlecsOut(pwcsName), grfMode, reserved1, reserved2, ppstm); hr = Result(_pstg->CreateStream(pwcsName, grfMode, reserved1, reserved2, &pistm)); *ppstm = WStream::Wrap(pistm); return hr; }
HRESULT WStorage::OpenStream(const OLECHAR * pwcsName, void *reserved1, const DWORD grfMode, DWORD reserved2, WStream **ppstm) { HRESULT hr; IStream *pistm;
out("IStorage %p::OpenStream(%s, %p, 0x%lX, %lu, %p)", _pstg, OlecsOut(pwcsName), reserved1, grfMode, reserved2, ppstm); hr = Result(_pstg->OpenStream(pwcsName, reserved1, grfMode, reserved2, &pistm)); *ppstm = WStream::Wrap(pistm); return hr; }
HRESULT WStorage::CreateStorage(const OLECHAR * pwcsName, const DWORD grfMode, DWORD reserved1, DWORD reserved2, WStorage **ppstg) { HRESULT hr; IStorage *pistg;
out("IStorage %p::CreateStorage(%s, 0x%lX, %lu, %lu, %p)", _pstg, OlecsOut(pwcsName), grfMode, reserved1, reserved2, ppstg); hr = Result(_pstg->CreateStorage(pwcsName, grfMode, reserved1, reserved2, &pistg)); *ppstg = WStorage::Wrap(pistg); return hr; }
HRESULT WStorage::OpenStorage(const OLECHAR * pwcsName, WStorage *pstgPriority, const DWORD grfMode, SNB snbExclude, DWORD reserved, WStorage **ppstg) { HRESULT hr; IStorage *pistg;
out("IStorage %p::OpenStorage(%s, %p, 0x%lX, %p, %lu, %p)", _pstg, OlecsOut(pwcsName), SAFEI(pstgPriority), grfMode, snbExclude, reserved, ppstg); hr = Result(_pstg->OpenStorage(pwcsName, (IStorage*) SAFEI(pstgPriority), grfMode, snbExclude, reserved, &pistg)); *ppstg = WStorage::Wrap(pistg); return hr; }
HRESULT WStorage::CopyTo(DWORD ciidExclude, IID *rgiidExclude, SNB snbExclude, WStorage *pstgDest) { out("IStorage %p::CopyTo(%lu, %p, %p, %p)", _pstg, ciidExclude, rgiidExclude, snbExclude, pstgDest->GetI()); return Result(_pstg->CopyTo(ciidExclude, rgiidExclude, snbExclude, pstgDest->GetI())); }
HRESULT WStorage::MoveElementTo(OLECHAR const FAR* lpszName, WStorage FAR *pstgDest, OLECHAR const FAR* lpszNewName, DWORD grfFlags) { out("IStorage %p::MoveElementTo(%p, %p, %p, %lu)", _pstg, lpszName, pstgDest->GetI(), lpszNewName, grfFlags); return Result(_pstg->MoveElementTo(lpszName, pstgDest->GetI(), lpszNewName, grfFlags)); }
HRESULT WStorage::Commit(const DWORD grfCommitFlags) { out("IStorage %p::Commit(0x%lX)", _pstg, grfCommitFlags); return Result(_pstg->Commit(grfCommitFlags)); }
HRESULT WStorage::Revert(void) { out("IStorage %p::Revert()", _pstg); return Result(_pstg->Revert()); }
HRESULT WStorage::EnumElements(DWORD reserved1, void *reserved2, DWORD reserved3, WEnumSTATSTG **ppenm) { HRESULT hr; IEnumSTATSTG *pienm;
out("IStorage %p::EnumElements(%lu, %p, %lu, %p)", _pstg, reserved1, reserved2, reserved3, ppenm); hr = Result(_pstg->EnumElements(reserved1, reserved2, reserved3, &pienm)); *ppenm = WEnumSTATSTG::Wrap(pienm); return hr; }
HRESULT WStorage::DestroyElement(const OLECHAR * pwcsName) { out("IStorage %p::DestroyElement(%s)", _pstg, OlecsOut(pwcsName)); return Result(_pstg->DestroyElement(pwcsName)); }
HRESULT WStorage::RenameElement(const OLECHAR * pwcsOldName, const OLECHAR * pwcsNewName) { out("IStorage %p::RenameElement(%s, %s)", _pstg, OlecsOut(pwcsOldName), OlecsOut(pwcsNewName)); return Result(_pstg->RenameElement(pwcsOldName, pwcsNewName)); }
HRESULT WStorage::SetElementTimes(const OLECHAR *lpszName, FILETIME const *pctime, FILETIME const *patime, FILETIME const *pmtime) { out("IStorage %p::SetElementTimes(%s, %p, %p, %p)", _pstg, OlecsOut(lpszName), pctime, patime, pmtime); return Result(_pstg->SetElementTimes(lpszName, pctime, patime, pmtime)); }
HRESULT WStorage::SetClass(REFCLSID clsid) { out("IStorage %p::SetClass(%s)", _pstg, GuidText(&clsid)); return Result(_pstg->SetClass(clsid)); }
HRESULT WStorage::SetStateBits(DWORD grfStateBits, DWORD grfMask) { out("IStorage %p::SetStateBits(0x%lX, 0x%lX)", _pstg, grfStateBits, grfMask); return Result(_pstg->SetStateBits(grfStateBits, grfMask)); }
HRESULT WStorage::Stat(STATSTG *pstatstg, DWORD grfStatFlag) { out("IStorage %p::Stat(%p, %lu)", _pstg, pstatstg, grfStatFlag); return Result(_pstg->Stat(pstatstg, grfStatFlag)); }
//+--------------------------------------------------------------
//
// IStream wrappers
//
//---------------------------------------------------------------
WStream *WStream::Wrap(IStream *pistm) { WStream *wstm;
wstm = new WStream(pistm); if (wstm == NULL) error(EXIT_OOM, "Unable to wrap IStream\n"); return wstm; }
WStream::WStream(IStream *pstm) { // Note: takes ownership of pstm
_pstm = pstm; }
WStream::~WStream(void) { if (_pstm) Release(); }
void WStream::Unwrap(void) { delete this; }
HRESULT WStream::QueryInterface(REFIID riid, void **ppvObj) { out("IStream %p::QueryInterface(riid, %p)", _pstm, ppvObj); return Result(_pstm->QueryInterface(riid, ppvObj)); }
ULONG WStream::AddRef(void) { ULONG ul;
ul = _pstm->AddRef(); out("IStream %p::AddRef() - %lu\n", _pstm, ul); return ul; }
ULONG WStream::Release(void) { ULONG ul;
ul = _pstm->Release(); out("IStream %p::Release() - %lu\n", _pstm, ul); if (ul == 0) _pstm = NULL; return ul; }
HRESULT WStream::Read(VOID *pv, ULONG cb, ULONG *pcbRead) { HRESULT hr;
out("IStream %p::Read(%p, %lu, %p)", _pstm, pv, cb, pcbRead); hr = _pstm->Read(pv, cb, pcbRead); if (pcbRead) out(" - %lu bytes", *pcbRead); Result(hr); if (pcbRead && *pcbRead != cb && fExitOnFail) error(EXIT_BADSC, "Couldn't read data\n"); return hr; }
HRESULT WStream::Write(VOID *pv, ULONG cb, ULONG *pcbWritten) { HRESULT hr;
out("IStream %p::Write(%p, %lu, %p)", _pstm, pv, cb, pcbWritten); hr = _pstm->Write(pv, cb, pcbWritten); if (pcbWritten) out(" - %lu bytes", *pcbWritten); Result(hr); if (pcbWritten && *pcbWritten != cb && fExitOnFail) error(EXIT_BADSC, "Couldn't write data\n"); return hr; }
HRESULT WStream::Seek(LONG dlibMove, DWORD dwOrigin, ULONG *plibNewPosition) { HRESULT hr; LARGE_INTEGER dlib; ULARGE_INTEGER plib;
out("IStream %p::Seek(%ld, %lu, %p)", _pstm, dlibMove, dwOrigin, plibNewPosition); LISet32(dlib, dlibMove); hr = _pstm->Seek(dlib, dwOrigin, &plib); if (plibNewPosition) { *plibNewPosition = ULIGetLow(plib); out(" - ptr %lu", *plibNewPosition); } return Result(hr); }
HRESULT WStream::SetSize(ULONG libNewSize) { ULARGE_INTEGER lib; out("IStream %p::SetSize(%lu)", _pstm, libNewSize); ULISet32(lib, libNewSize); return Result(_pstm->SetSize(lib)); }
HRESULT WStream::Commit(const DWORD dwFlags) { out("IStream %p:Commit(%lu)", _pstm, dwFlags); return Result(_pstm->Commit(dwFlags)); }
HRESULT WStream::CopyTo(WStream *pstm, ULONG cb, ULONG *pcbRead, ULONG *pcbWritten) { ULARGE_INTEGER lcb, pcbr, pcbw; HRESULT hr; out("IStream %p::CopyTo(%p, %lu, %p, %p)", _pstm, pstm->GetI(), cb, pcbRead, pcbWritten); ULISet32(lcb, cb); hr = Result(_pstm->CopyTo(pstm->GetI(), lcb, &pcbr, &pcbw)); if (pcbRead) *pcbRead = ULIGetLow(pcbr); if (pcbWritten) *pcbWritten = ULIGetLow(pcbw); return hr; }
HRESULT WStream::Stat(STATSTG *pstatstg, DWORD grfStatFlag) { out("IStream %p::Stat(%p, %lu)", _pstm, pstatstg, grfStatFlag); return Result(_pstm->Stat(pstatstg, grfStatFlag)); }
HRESULT WStream::Clone(WStream * *ppstm) { HRESULT hr; IStream *pistm;
out("IStream %p::Clone(%p)", _pstm, ppstm); hr = Result(_pstm->Clone(&pistm)); *ppstm = WStream::Wrap(pistm); return hr; }
//+--------------------------------------------------------------
//
// IEnumSTATSTG wrappers
//
//---------------------------------------------------------------
WEnumSTATSTG *WEnumSTATSTG::Wrap(IEnumSTATSTG *pienm) { WEnumSTATSTG *wenm;
wenm = new WEnumSTATSTG(pienm); if (wenm == NULL) error(EXIT_OOM, "Unable to wrap IEnumSTATSTG\n"); return wenm; }
WEnumSTATSTG::WEnumSTATSTG(IEnumSTATSTG *penm) { // Note: takes ownership of penm
_penm = penm; }
WEnumSTATSTG::~WEnumSTATSTG(void) { if (_penm) Release(); }
void WEnumSTATSTG::Unwrap(void) { delete this; }
HRESULT WEnumSTATSTG::QueryInterface(REFIID riid, void **ppvObj) { out("IEnumSTATSTG %p::QueryInterface(riid, %p)", _penm, ppvObj); return Result(_penm->QueryInterface(riid, ppvObj)); }
ULONG WEnumSTATSTG::AddRef(void) { ULONG ul;
ul = _penm->AddRef(); out("IEnumSTATSTG %p::AddRef() - %lu\n", _penm, ul); return ul; }
ULONG WEnumSTATSTG::Release(void) { ULONG ul;
ul = _penm->Release(); out("IEnumSTATSTG %p::Release() - %lu\n", _penm, ul); if (ul == 0) _penm = NULL; return ul; }
HRESULT WEnumSTATSTG::Next(ULONG celt, STATSTG rgelt[], ULONG *pceltFetched) { out("IEnumSTATSTG %p::Next(%lu, rgelt, %p)", _penm, celt, pceltFetched); return Result(_penm->Next(celt, rgelt, pceltFetched)); }
HRESULT WEnumSTATSTG::Skip(ULONG celt) { out("IEnumSTATSTG %p::Skip(%lu)", _penm, celt); return Result(_penm->Skip(celt)); }
HRESULT WEnumSTATSTG::Reset(void) { out("IEnumSTATSTG %p::Reset()", _penm); return Result(_penm->Reset()); }
HRESULT WEnumSTATSTG::Clone(WEnumSTATSTG **ppenm) { HRESULT hr; IEnumSTATSTG *pienm;
out("IEnumSTATSTG %p::Clone(%p)", _penm, ppenm); hr = Result(_penm->Clone(&pienm)); *ppenm = WEnumSTATSTG::Wrap(pienm); return hr; }
//+--------------------------------------------------------------
//
// Root level wrappers
//
//---------------------------------------------------------------
HRESULT WStgCreateDocfile(const OLECHAR * pwcsName, const DWORD grfMode, DWORD reserved, WStorage * *ppstgOpen) { HRESULT hr; IStorage *pistg;
#define LARGE_SECTORS
#ifndef LARGE_SECTORS
if (pwcsName) { out("StgCreateDocfile(%s, 0x%lX, %lu, %p)", OlecsOut(pwcsName), grfMode, reserved, ppstgOpen); } hr = Result(StgCreateDocfile(pwcsName, grfMode, reserved, &pistg)); #else
out("StgCreateStorageEx(%s, 0x%lX, %lu, %p)", OlecsOut(pwcsName), grfMode, reserved, ppstgOpen);
STGOPTIONS stgoptions; stgoptions.usVersion = STGOPTIONS_VERSION; stgoptions.reserved = 0; stgoptions.ulSectorSize = 4096; stgoptions.pwcsTemplateFile = NULL;
hr = Result(StgCreateStorageEx ( pwcsName, grfMode, STGFMT_DOCFILE, 0, &stgoptions, 0, IID_IStorage, (void **) &pistg)); #endif
*ppstgOpen = WStorage::Wrap(pistg); return hr; }
HRESULT WStgCreateDocfileOnILockBytes(ILockBytes *plkbyt, const DWORD grfMode, DWORD reserved, WStorage * *ppstgOpen) { HRESULT hr; IStorage *pistg;
out("StgCreateDocfileOnILockBytes(%p, 0x%lX, %lu, %p)", plkbyt, grfMode, reserved, ppstgOpen); hr = Result(StgCreateDocfileOnILockBytes(plkbyt, grfMode, reserved, &pistg)); *ppstgOpen = WStorage::Wrap(pistg); return hr; }
HRESULT WStgOpenStorage(const OLECHAR * pwcsName, WStorage *pstgPriority, const DWORD grfMode, SNB snbExclude, DWORD reserved, WStorage * *ppstgOpen) { HRESULT hr; IStorage *pistg;
out("StgOpenStorage(%s, %p, 0x%lX, %p, %lu, %p)", OlecsOut(pwcsName), SAFEI(pstgPriority), grfMode, snbExclude, reserved, ppstgOpen); hr = Result(StgOpenStorage(pwcsName, (IStorage*)SAFEI(pstgPriority), grfMode, snbExclude, reserved, &pistg));
*ppstgOpen = WStorage::Wrap(pistg); return hr; }
HRESULT WStgOpenStorageOnILockBytes(ILockBytes *plkbyt, WStorage *pstgPriority, const DWORD grfMode, SNB snbExclude, DWORD reserved, WStorage * *ppstgOpen) { HRESULT hr; IStorage *pistg;
out("StgOpenStorageOnILockBytes(%p, %p, 0x%lX, %p, %lu, %p)", plkbyt, SAFEI(pstgPriority), grfMode, snbExclude, reserved, ppstgOpen); hr = Result(StgOpenStorageOnILockBytes(plkbyt, (IStorage*)SAFEI(pstgPriority), grfMode, snbExclude, reserved, &pistg)); *ppstgOpen = WStorage::Wrap(pistg); return hr; }
HRESULT WStgIsStorageFile(const OLECHAR * pwcsName) { out("StgIsStorageFile(%s)", OlecsOut(pwcsName)); return Result(StgIsStorageFile(pwcsName)); }
HRESULT WStgIsStorageILockBytes(ILockBytes * plkbyt) { out("StgIsStorageILockBytes(%p)", plkbyt); return Result(StgIsStorageILockBytes(plkbyt)); }
|