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. |