acehreli
07/02/2005, 03:51
Benim MFC belgelerinde "Serialization: Making a Serializable Class" sayfasindan anladigim soyle... Oncelikle, burada kaydetmek istedigin sinif CBirSinif oldugu icin, bence senin isin onunla. Ayrica CKayit sinifina gerek oldugunu sanmiyorum.
Herhalde sen de okumussundur ama yine de MFC'nin belgelerinden aktarirsam, bir sinifi arsivlenebilir (serializable) yapmak icin recete soyleymis:
1) CObject'ten turetmek
2) Serialize islevini tanimlamak
3) Sinif taniminda DECLARE_SERIAL makrosunu kullanmak
4) Parametre almayan bir kurucu islev tanimlamak
5) Gercekleme kutugunde (.cpp) IMPLEMENT_SERIAL makrosunu kullanmak
Bu durumda CBirSinif sinifini soyle yazabilirsin (gibi geliyor :) )
Baslik kutugunde:
class CBirSinif : public CObject
{
int intUye_;
CString strUye_;
public:
DECLARE_SERIAL(CBirSinif);
// Bos kurucu
CBirSinif();
void Serialize(CArchive & arsiv);
};
Gercekleme kutugunde:
void CBirSinif::Serialize(CArchive & arsiv)
{
// Once ust sinifinkini cagirmak gerekiyormus
// (Bu durumda CObject)
CObject::Serialize(arsiv);
// Simdi kendi sinifimiza ozel arsiv islemi...
if(arsiv.IsStoring())
arsiv << intUye_ << strUye_;
else
arsiv >> intUye_ >> strUye_;
}
IMPLEMENT_SERIAL(CBirSinif, CObject, 1);
IMPLEMENT_SERIAL makrosunun ucuncu parametresi arsivin surum numarasi gibi bir seymis.
Bu isine yarayacak mi acaba...
Ali
Herhalde sen de okumussundur ama yine de MFC'nin belgelerinden aktarirsam, bir sinifi arsivlenebilir (serializable) yapmak icin recete soyleymis:
1) CObject'ten turetmek
2) Serialize islevini tanimlamak
3) Sinif taniminda DECLARE_SERIAL makrosunu kullanmak
4) Parametre almayan bir kurucu islev tanimlamak
5) Gercekleme kutugunde (.cpp) IMPLEMENT_SERIAL makrosunu kullanmak
Bu durumda CBirSinif sinifini soyle yazabilirsin (gibi geliyor :) )
Baslik kutugunde:
class CBirSinif : public CObject
{
int intUye_;
CString strUye_;
public:
DECLARE_SERIAL(CBirSinif);
// Bos kurucu
CBirSinif();
void Serialize(CArchive & arsiv);
};
Gercekleme kutugunde:
void CBirSinif::Serialize(CArchive & arsiv)
{
// Once ust sinifinkini cagirmak gerekiyormus
// (Bu durumda CObject)
CObject::Serialize(arsiv);
// Simdi kendi sinifimiza ozel arsiv islemi...
if(arsiv.IsStoring())
arsiv << intUye_ << strUye_;
else
arsiv >> intUye_ >> strUye_;
}
IMPLEMENT_SERIAL(CBirSinif, CObject, 1);
IMPLEMENT_SERIAL makrosunun ucuncu parametresi arsivin surum numarasi gibi bir seymis.
Bu isine yarayacak mi acaba...
Ali