PDA

Tam Sürümünü Görmek İçin : MFC sınıf serilestirme


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


ceeyt
07/02/2005, 05:00
Sorunu hallettim ve sunu fark ettim ki asil sormak istedigimi anlatamamisim bile, sorum cok mantiksizmis :) Forumdan atilmayayimda...

IMPLEMENT_SERIAL makrosunun ucuncu parametresi arsivin surum numarasi gibi bir seymis.
Bu isine yarayacak mi acaba...

1 olarak kullanmam yetiyor, ileride kullanim amacina yonelik bir uygulama yapacagimi sanmiyorum.Ya yanlis saniyorsam... :)

Asil sormak istedigim( ve soramadigim ) bir cok nesne olmasi durumuydu... Bunun icin, varligini daha sonra ogrendigim CObarray sinifini kullandim ve tum nesnelerimi bu turden bir dizide tuttum,ise yaradi.