///////////////////////////////////////////////////////////////////////////// // serialization void CGXGridCellData::SerializeEx(CArchive& ar, CString& strProperty ) { ASSERT_VALID(this); DWORD dwDataLen; if (ar.IsStoring()) // Write { CMemFile memFile; CArchive arMem(&memFile, CArchive::store ); Serialize ( arMem ); arMem.Flush(); dwDataLen = memFile.GetLength(); if ( dwDataLen > 0 ) { BYTE *pTemp = new BYTE [dwDataLen+1]; memFile.Seek(0, CFile::begin); memFile.Read(pTemp, dwDataLen ); ar.Write(&dwDataLen, sizeof(DWORD)); ar.Write(pTemp, dwDataLen); // Property Save CString strProperty = BinaryToStringEx ( pTemp, dwDataLen ); if ( pTemp ) delete []pTemp; } } else // Read { ar >> dwDataLen; if ( dwDataLen > 0 ) { BYTE *pTemp = new BYTE[dwDataLen+1]; ar.Read(pTemp, dwDataLen ); CMemFile memFile; memFile.Attach ( (BYTE*)pTemp, dwDataLen ); CArchive arMem(&memFile, CArchive::load ); Serialize ( arMem ); // Property Save CString DWORD dwTotLen = dwDataLen + sizeof(DWORD); BYTE *pvData = new BYTE[dwTotLen]; *(DWORD*)pvData = dwTotLen; memcpy ( pvData + sizeof(DWORD), pTemp, dwDataLen ); if ( pTemp ) delete[] pTemp; strProperty = BinaryToStringEx ( pvData, dwTotLen ); if ( pvData ) delete[] pvData; } } }
DWORD SupFileSubtitleProvider::ThreadProc() { CFile f; if (!f.Open(m_fname, CFile::modeRead|CFile::typeBinary|CFile::shareDenyNone)) { return 1; } f.SeekToBegin(); CMemFile sub; sub.SetLength(f.GetLength()); sub.SeekToBegin(); int len; BYTE buff[65536]; while ((len = f.Read(buff, sizeof(buff))) > 0) { sub.Write(buff, len); } sub.SeekToBegin(); WORD sync = 0; USHORT size = 0; REFERENCE_TIME rtStart = 0; CAutoLock cAutoLock(&m_csCritSec); while (sub.GetPosition() < (sub.GetLength() - 10)) { sync = (WORD)ReadByte(&sub, 2); if (sync == 'PG') { rtStart = UINT64(ReadByte(&sub, 4) * (1000 / 9)); sub.Seek(4 + 1, CFile::current); // rtStop + Segment type size = ReadByte(&sub, 2) + 3; // Segment size sub.Seek(-3, CFile::current); sub.Read(buff, size); m_pSub->ParseSample(buff, size, rtStart, 0); } else { break; } } sub.Close(); return 0; }
CString CGXGridCellData::GetMultiCaptionBlobDataChange ( ) { CString strProperty; ASSERT_VALID(this); // if ( !m_bSingleMode ) // DeleteContents(); CMemFile memFile; CArchive arMem(&memFile, CArchive::store ); Serialize ( arMem ); arMem.Flush(); DWORD dwDataLen = memFile.GetLength(); if ( dwDataLen > 0 ) { BYTE *pTemp = new BYTE [dwDataLen+1]; memFile.Seek(0, CFile::begin); memFile.Read(pTemp, dwDataLen ); DWORD dwTotLen = dwDataLen + sizeof(DWORD); BYTE *pvData = new BYTE[dwTotLen]; *(DWORD*)pvData = dwTotLen; memcpy ( pvData + sizeof(DWORD), pTemp, dwDataLen ); if ( pTemp ) delete[] pTemp; // Property Save CString strProperty = BinaryToStringEx ( pvData, dwTotLen ); if ( pvData ) delete[] pvData; } return strProperty; }
DWORD CALLBACK CFTPProtocolOutput::ProtocolStreamInCallback(DWORD_PTR dwCookie, LPBYTE pbBuff, LONG cb, LONG *pcb) { CMemFile* pMf = reinterpret_cast<CMemFile*>(dwCookie); *pcb = pMf->Read(pbBuff, cb); return 0; }
//**************************************************************************************** BOOL CBCGPGridSerializeManager::PrepareDataFromSelection () { ASSERT (m_pOwnerGrid != NULL); CleanUp (); if (m_pOwnerGrid != NULL) { m_nLastColumn = m_pOwnerGrid->GetColumnsInfo ().GetColumnCount (TRUE) - 1; m_nLastRow = m_pOwnerGrid->GetTotalRowCount () - 1; } if (m_ClipboardFormatType == CF_Rows) { if (!m_pOwnerGrid->NormalizeSelectionList ()) { return FALSE; } } //--------------------- // Calculate min offset //--------------------- int i = 0; CBCGPGridItemID idOffset (-1, -1); for (i = 0; i < m_pOwnerGrid->GetSelectionCount (); i++) { CBCGPGridRange rangeIndex, rangeOrder; if (m_pOwnerGrid->GetSelection (i, rangeIndex) && IndexToOrder (rangeIndex, rangeOrder)) { const int nRow = (rangeOrder.m_nTop != -1) ? rangeOrder.m_nTop: 0; const int nCol = (rangeOrder.m_nLeft != -1) ? rangeOrder.m_nLeft: 0; if (idOffset.m_nRow == -1 || nRow <= idOffset.m_nRow) { idOffset.m_nRow = nRow; } if (idOffset.m_nColumn == -1 || nCol <= idOffset.m_nColumn) { idOffset.m_nColumn = nCol; } if (idOffset.m_nRow == -1 || idOffset.m_nRow == 0 && idOffset.m_nRow == m_nLastRow) { m_bWholeColSelected = TRUE; } if (idOffset.m_nColumn == -1 || idOffset.m_nColumn == 0 && idOffset.m_nColumn == m_nLastColumn) { m_bWholeRowSelected = TRUE; } } } if (idOffset.m_nRow == -1) { idOffset.m_nRow = 0; } if (idOffset.m_nColumn == -1) { idOffset.m_nColumn = 0; } ASSERT (idOffset.m_nRow >= 0); ASSERT (idOffset.m_nColumn >= 0); m_idRangesOffset = idOffset; //------------------------------ // Prepare serialized selection: //------------------------------ for (i = 0; i < m_pOwnerGrid->GetSelectionCount (); i++) { CBCGPGridRange rangeIndex, rangeOrder; if (m_pOwnerGrid->GetSelection (i, rangeIndex) && IndexToOrder (rangeIndex, rangeOrder)) { const int nRowOffset = (rangeOrder.m_nTop != -1) ? rangeOrder.m_nTop - m_idRangesOffset.m_nRow: 0; const int nColOffset = (rangeOrder.m_nLeft != -1) ? rangeOrder.m_nLeft - m_idRangesOffset.m_nColumn: 0; CBCGPGridRange rangeRelative ( nColOffset, nRowOffset, nColOffset + (rangeOrder.m_nRight - rangeOrder.m_nLeft), nRowOffset + (rangeOrder.m_nBottom - rangeOrder.m_nTop)); try { CMemFile f; CArchive archive (&f, CArchive::store | CArchive::bNoFlushOnDelete); if (m_ClipboardFormatType == CF_Items) { WriteItemsToArchive (archive, rangeOrder); } else if (m_ClipboardFormatType == CF_Rows) { WriteRowsToArchive (archive, rangeOrder); } archive.Close (); if (f.GetLength () <= 0) { return FALSE; } UINT cbSize = (UINT)f.GetLength (); BYTE* pData = new BYTE[cbSize]; if (NULL == pData) { delete [] pData; return FALSE; } f.SeekToBegin (); if (f.Read (pData, cbSize) != cbSize) { delete [] pData; return FALSE; } AddRange (rangeRelative, cbSize, pData); } catch (CFileException* pEx) { TRACE(_T("CBCGPGridSerializeManager::PrepareDataFromSelection. File exception\r\n")); pEx->Delete (); return FALSE; } catch (CException* e) { TRACE(_T("CBCGPGridSerializeManager::PrepareDataFromSelection. Exception\r\n")); e->Delete (); return FALSE; } } } return TRUE; }
//********************************************************************************* static void openSnapshotTestSectrion() { CTBSection xCurrentUser; xCurrentUser.Open(&CTBSection::tbRootSection, "CurrentUser"); CTBSection xSnapshotTest; xSnapshotTest.Open(&xCurrentUser, "SnapshotTest", TBOPEN_MODE_SNAPSHOT); CString strName; DWORD dwType = 0; int nTop = 0; BOOL more = xSnapshotTest.GetFirstItem(strName, dwType); while(more) { TEST_VERIFY((dwType == TBVTYPE_LONGBINARY) == (strName == "Blob1")); TEST_VERIFY((dwType == TBVTYPE_SECTION) == (strName == "Section1")); if(dwType != TBVTYPE_LONGBINARY && dwType != TBVTYPE_SECTION) { CTBValue value; CString prefix; long index = 0; sscanf(strName, "%s %d", prefix.GetBuffer(10), &index); if(prefix == "Name") { if(nTop < index) nTop = index; TEST_VERIFY(dwType == TBVTYPE_TEXT); xSnapshotTest.GetValue(strName, &value); TEST_VERIFY(strcmp(value.m_pValue->data.text, "Name") == 0); } else if(prefix == "Age") { if(nTop < index) nTop = index; TEST_VERIFY(dwType == TBVTYPE_INTEGER); xSnapshotTest.GetValue(strName, &value); TEST_VERIFY(value.m_pValue->data.int32 == index); } } more = xSnapshotTest.GetNextItem(strName, dwType); } TEST_VERIFY(nTop == 199); CTBSection xSection1; xSection1.Open(&xSnapshotTest, "Section1"); xSection1.Close(); //-------------------------------------------------------------- CMemFile memFile; xSnapshotTest.GetLongBinary("Blob1", &memFile); memFile.SeekToBegin(); for(int i = 0; i < 64; ++i) { BYTE buff[1024] = {0}; BYTE buff2[1024] = {0}; memset(buff2, i, sizeof(buff2)); memFile.Read(buff, sizeof(buff)); TEST_VERIFY(memcmp(buff, buff2, 1024) == 0); } //-------------------------------------------------------------- TEST_VERIFY(memFile.GetPosition() == memFile.GetLength()); xSnapshotTest.Close(); }