Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » Serialisierung

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
12.03.2004, 10:27 Uhr
Tommix



Hallo,
ich habe ein Problem mit der Funktion GetObjectSchema beim Deserialisieren von Objekten. Nachfolgender Code liefer als Versionsnummer (UINT)-1, also "Versionsnummer unbekannt". Den Funktionsaufruf vor den Aufruf der Basisklasse zu setzen bringt auch nichts. Was mache ich falsch?

C++:
// ForumSerialize.cpp : Definiert den Einsprungpunkt für die Konsolenanwendung.
//

#include "stdafx.h"
#include "ForumSerialize.h"

#include <iostream>
#include <iomanip>

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif



class CTestClass : public CObject  
{
public:
    DECLARE_SERIAL(CTestClass);

    CTestClass();
    virtual ~CTestClass();

    virtual void Serialize(CArchive& ar);

protected:
    int val;
};

IMPLEMENT_SERIAL(CTestClass, CObject, VERSIONABLE_SCHEMA | 1)

CTestClass::CTestClass()
:   val(12345)
{
}

CTestClass::~CTestClass()
{
}

void CTestClass::Serialize(CArchive &ar)
{
    if (ar.IsLoading())
    {
        CObject::Serialize(ar);

        UINT version = ar.GetObjectSchema();
        // (Sollte 1 sein?)

        std::cout << std::setbase(16) << "Version: " << version << std::endl;

        ar >> val;

    }
    else
    {
        CObject::Serialize(ar);
        ar << val;
    }
}

/////////////////////////////////////////////////////////////////////////////


CWinApp theApp;

int _tmain()
{
    const CString tempfile("D:/temp/test.tmp");

    if (AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
    {
        // Schreiben
        {

        CTestClass testObject;
            
        CFile file(tempfile, CFile::modeCreate | CFile::modeWrite);
        CArchive ar(&file, CArchive::store);
            
        testObject.Serialize(ar);
        }

        // Lesen
        {
            CTestClass testObject;

            CFile file(tempfile, CFile::modeRead);
            CArchive ar(&file, CArchive::load);
            
            testObject.Serialize(ar);
        }

        DeleteFile(tempfile);
        
        return EXIT_SUCCESS;
    }
    else
    {
        return EXIT_FAILURE;
    }

}


(Konsolenanwendung mit MFC-Unterstützung, VC++ 6.0 SP5)

Gruss, Tommix

Dieser Post wurde am 12.03.2004 um 10:28 Uhr von Tommix editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: