BOOL CArchiveToIStream (CArchive& ar, IStream** ppStream) { BOOL bOK = FALSE; ULONG ulRead, ulWritten; BYTE aBuffer[IO_BUFFERSIZE]; ASSERT(ar.IsLoading()); *ppStream = NULL; if (ar.IsLoading()) { long lSize; ar >> lSize; if (lSize > 0) { COleStreamFile file; bOK = file.CreateMemoryStream(); if (!bOK) return FALSE; IStream* pStream = file.GetStream(); while (lSize > 0) { if (lSize < IO_BUFFERSIZE) ulRead = lSize; else ulRead = IO_BUFFERSIZE; ar.Read((void*)aBuffer, ulRead); pStream->Write((const void*)aBuffer, ulRead, &ulWritten); ASSERT(ulWritten == ulRead); lSize -= ulRead; } *ppStream = pStream; file.Detach(); } bOK = TRUE; }