Exemplo n.º 1
0
/*
// ReadData()
//
// Read the record.
*/
ERRORCODE ComponentRecord::ReadData( StorageDevicePtr device )
{
	ERRORCODE error = device->read_record( &record, sizeof(record) );

	if (ERRORCODE_None == error)
	{
		m_pInternalData = new RBufferStream();
		error = device->huge_read( m_pInternalData->GetBuffer( record.data_size ), record.data_size );

		// Make a Framework storage out of the internal data
		RChunkStorage storage( record.data_size, m_pInternalData->GetBuffer( record.data_size ) );

		// We need to check for linked data right away,
		// because it may be necessary before the component
		// is needed.  Note: the component could be loaded
		// here as well, but might as well load it only
		// when it is about to be used.
		if (!storage.Start( kLinkedDataID, FALSE ).End( ))
		{
			DWORD clsidLinkedData;
			storage >> clsidLinkedData;

			m_pLinkedData = CPLinkedData::CreateFromClassId( clsidLinkedData, database );
			m_pLinkedData->Read( storage );

			storage.SelectParentChunk();
		}