home *** CD-ROM | disk | FTP | other *** search
- // This is a part of the Microsoft Foundation Classes C++ library.
- // Copyright (C) 1992-1998 Microsoft Corporation
- // All rights reserved.
- //
- // This source code is only intended as a supplement to the
- // Microsoft Foundation Classes Reference and related
- // electronic documentation provided with the library.
- // See these sources for detailed information regarding the
- // Microsoft Foundation Classes product.
-
- #include "stdafx.h"
-
- #ifdef AFX_CMNCTL_SEG
- #pragma code_seg(AFX_CMNCTL_SEG)
- #endif
-
- #ifdef _DEBUG
- #undef THIS_FILE
- static char THIS_FILE[] = __FILE__;
- #endif
-
- #define new DEBUG_NEW
-
- /////////////////////////////////////////////////////////////////////////////
- // CArchiveStream
-
- #ifndef _AFX_NO_OLE_SUPPORT
-
- CArchiveStream::CArchiveStream(CArchive* pArchive)
- {
- m_pArchive = pArchive;
- }
-
- STDMETHODIMP_(ULONG)CArchiveStream::AddRef()
- {
- return 1;
- }
-
- STDMETHODIMP_(ULONG)CArchiveStream::Release()
- {
- return 0;
- }
-
- STDMETHODIMP CArchiveStream::QueryInterface(REFIID iid, LPVOID* ppvObj)
- {
- if (iid == IID_IUnknown || iid == IID_IStream)
- {
- *ppvObj = this;
- return NOERROR;
- }
- return E_NOINTERFACE;
- }
-
- STDMETHODIMP CArchiveStream::Read(void *pv, ULONG cb, ULONG *pcbRead)
- {
- ASSERT(m_pArchive != NULL);
- ASSERT(m_pArchive->IsLoading());
-
- int nRead = 0;
- TRY
- {
- nRead = m_pArchive->Read(pv, cb);
- }
- CATCH_ALL(e)
- {
- DELETE_EXCEPTION(e);
- return E_UNEXPECTED;
- }
- END_CATCH_ALL
-
- if (pcbRead != NULL)
- *pcbRead = nRead;
- return NOERROR;
- }
-
- STDMETHODIMP CArchiveStream::Write(const void *pv, ULONG cb, ULONG *pcbWritten)
- {
- ASSERT(m_pArchive != NULL);
- ASSERT(m_pArchive->IsStoring());
-
- int nWrite = 0;
- TRY
- {
- m_pArchive->Write(pv, cb);
- nWrite = cb;
- }
- CATCH_ALL(e)
- {
- DELETE_EXCEPTION(e);
- return E_UNEXPECTED;
- }
- END_CATCH_ALL
-
- if (pcbWritten != NULL)
- *pcbWritten = nWrite;
- return NOERROR;
- }
-
- STDMETHODIMP CArchiveStream::Seek(LARGE_INTEGER uliOffset, DWORD dwOrigin,
- ULARGE_INTEGER* puliNew)
- {
- // can't handle offsets with really large magnitude
- if ((uliOffset.HighPart != 0) &&
- ((uliOffset.HighPart != -1) || ((long)uliOffset.LowPart >= 0)))
- return E_NOTIMPL;
-
- CFile* pFile = m_pArchive->GetFile();
- if (pFile == NULL)
- return E_NOTIMPL;
- m_pArchive->Flush();
-
- ASSERT(STREAM_SEEK_SET == CFile::begin);
- ASSERT(STREAM_SEEK_CUR == CFile::current);
- ASSERT(STREAM_SEEK_END == CFile::end);
- LONG lNew;
- TRY
- {
- lNew = pFile->Seek((LONG)uliOffset.LowPart, (UINT)dwOrigin);
- }
- CATCH_ALL(e)
- {
- DELETE_EXCEPTION(e);
- return E_UNEXPECTED;
- }
- END_CATCH_ALL
-
- if (puliNew != NULL)
- ULISet32(*puliNew, lNew);
-
- return NOERROR;
- }
-
- STDMETHODIMP CArchiveStream::SetSize(ULARGE_INTEGER)
- {
- return E_NOTIMPL;
- }
-
- STDMETHODIMP CArchiveStream::CopyTo(LPSTREAM, ULARGE_INTEGER, ULARGE_INTEGER*,
- ULARGE_INTEGER*)
- {
- return E_NOTIMPL;
- }
-
- STDMETHODIMP CArchiveStream::Commit(DWORD)
- {
- return E_NOTIMPL;
- }
-
- STDMETHODIMP CArchiveStream::Revert()
- {
- return E_NOTIMPL;
- }
-
- STDMETHODIMP CArchiveStream::LockRegion(ULARGE_INTEGER, ULARGE_INTEGER, DWORD)
- {
- return E_NOTIMPL;
- }
-
- STDMETHODIMP CArchiveStream::UnlockRegion(ULARGE_INTEGER, ULARGE_INTEGER,
- DWORD)
- {
- return E_NOTIMPL;
- }
-
- STDMETHODIMP CArchiveStream::Stat(STATSTG*, DWORD)
- {
- return E_NOTIMPL;
- }
-
- STDMETHODIMP CArchiveStream::Clone(LPSTREAM*)
- {
- return E_NOTIMPL;
- }
-
- #endif // _AFX_NO_OLE_SUPPORT
-