-
SOS Serialisation (HELP)
Bonjour,
j'ai serieusement besoin de l'aide de quelqu'un qui sait serialiser sous Visual 6.0 !!:cry:
ça fait depuis le debut de mes revisions que j'essaie , avec CObject, Implement marchin gna gna....
Si vous voulez m'aider (et ô combien je vous serais reconnaissante), je vous envoie mon prog ( tout bebete et pas difficile à comprendre ), ou on peut voir par msn aussi. Comme vous voulez, pourvu que j'y arrive !:cry:
enfin voila tout, heureusement que ce forum existe
voila vous pouvez m'envoyer un mail sur avison_scarlatti@yahoo.fr
Cordialement,
une étudiante.
-
Difficile de t'aider avec aussi peu d'éléments.
Essaie de faire état d'où tu en es et de poser des questions précises.
-
Voici mon prog ;
C'est un SDI.
Cela consiste à entrer des participants pour un voyage.
Dans mon menu j'ai ajouté Nouveau Voyage et Nouveau Participant.
j'ai crée la classe CDialParticipant ou l'utilisateur aura à rentrer dans une editbox le nom, prenom, et age d'un participant.
J'ai crée la classe CParticipant
class CParticipants : public CObject /j'ai changé document en Object pr faire la serialisatation
{
public:
CParticipants();
// overridden for document i/o
~CParticipants();
void Serialize(CArchive& ar);
public:
CString m_PartNom;
CString m_PartPrenom;
int m_PartAge;
DECLARE_SERIAL(CParticipants) // a ajouter pr la serialisation
};
voici le point CPP avec ma fonction serialisation :
IMPLEMENT_SERIAL(CParticipants,CObject,1) //j'ai pas trop compris à quoi servait ce 1 =(
/////////////////////////////////////////////////////////////////////////////
// CParticipants
CParticipants::CParticipants()
{
m_PartAge=0;
m_PartNom=" ";
m_PartPrenom=" ";
}
CParticipants::~CParticipants()
{
}
/////////////////////////////////////////////////////////////////////////////
// CParticipants serialization
void CParticipants::Serialize(CArchive& archive)
{
CObject::Serialize (archive);
if (archive.IsStoring())
{
archive<<m_PartNom<<m_PartPrenom<<m_PartAge;
}
else
{
archive>>m_PartNom>>m_PartPrenom>>m_PartAge;
}
}
Ensuite voici ici ma classe CVoyage ; notez bien qu'elle contient un element de type CParticipants
Bien evidemment j'ai crée un boite de dialogue pr entrer les caracterisitiques du voyage heure d'arrivée, de depart, destination.
class CVoyage : public CObject
{
public:
void Affiche (CDC* pDC);
COleDateTime m_odtRetour;
COleDateTime m_odtDepart;
CString m_destination;
CParticipants *liste;
CVoyage();
CVoyage(CString dest);
virtual ~CVoyage();
void Serialize(CArchive& ar);
DECLARE_SERIAL(CVoyage)
};
void CVoyage::Serialize(CArchive& archive)
{
CObject::Serialize(archive);
if (archive.IsStoring())
{
archive<<m_destination;
for (int i=1;i<2;i++)
liste[i].Serialize(archive);
}
else
{
archive>>m_destination;
for (int i=1;i<2;i++)
liste[i].Serialize(archive);
}
}
Enfin j'ai crée dans le Doc un pointeur sur CVoyage
public:
void OnCaractVoyage();
CVoyage *pointeur;
void OnCaractParticipants()
et voici les fonctions defini dans MonProgDoc.cpp
qui sont censé me permettre enregister le texte entré dans la bdd, l'associé à par exemple m_destination de CVoyage
puis les retranscrire quand l'utilisitateur aura fait dans le menu Nouveau Voyage: Mais ca ne marche poooo :(
void CClubMedDoc::OnNouveauParticipants()
{
CDialParticipants maboite1;
//CParticipants(liste[1]);
maboite1.m_nom1=pointeur->liste[1].m_PartNom; //pointeur de type CVoyage defini dans .doc
//liste de type CParticipants
maboite1.m_prenom1=pointeur->liste[1].m_PartPrenom;
if (maboite1.DoModal()==IDOK)
{
pointeur->liste[1].m_PartNom=maboite1.m_nom1;
pointeur->liste[1].m_PartPrenom=maboite1.m_prenom1;
}
UpdateAllViews(NULL);
}
void CClubMedDoc::OnNouveauVoyage()
{
CDialVoyage maboite2;
maboite2.m_DialDestination=pointeur->m_destination;
if (maboite2.DoModal()==IDOK)
{
pointeur->m_destination=maboite2.m_DialDestination;
}
UpdateAllViews(NULL);
}
j'ai aussi mis ça dans le DOC, je l'ai pris de qqun mais ça marche pas non plus
/////////////////////////////////////////////////////////////////////////////
// CClubMedDoc serialization
void CClubMedDoc::Serialize(CArchive& archive)
{
pointeur->Serialize(archive);
if (archive.IsStoring())
{
// TODO: add storing code here
}
else
{
// TODO: add loading code here
}
}
pourtant j'ai oublié aucun implement serial, declare serial, j'ai oublié quelque chose mais quoi ??!
(c tres lourd mais bon j'aurai pu envoyer mon prog a qui ?!)
Cordialement
-
http://www.developpez.net/forums/ima...ilies/code.png
Il y a clairement un problème de conception.
Si ton application est strictement une appli SDI, alors ce sont les objets CDocument qui doivent être instanciés & serialisés. Et si tu ne te plies pas exactement au modèle SDI, tu n'auras que des problèmes.
Je pense que le mieux serait de revoir tout ça sur papier : quelles données doivent contenir tes documents, comment ils sont créés, visualisés, modifiés, et quelles sont les classes annexes nécessaires.
Dès lors que tout ça sera clairement défini, refaire une appli avec doc sérialisable avec le wizard du Visual 6 devrait être rapide et sans gros souci,
ce que tu cherches à faire étant assez simple...
-
c bon c resolu
-
Citation:
Envoyé par poulette3000
merchi ! ;)
Bonsoir,
Si c'est résolu, il faut cliquer sur le bouton :resolu:. Merci.
(cela évite à ceux qui voudraient aider de lire un message pour rien et cela permet à ceux qui chechent une réponse de savoir plus facilement où ils peuvent la trouver)
Cordialement,
DS.
-
Poulette3000, il y a un forum spécifique MFC
Ne pas poster ici.
Sinon pour le code donné je ne vois pas ce qui ne va pas ; cela semble ok