Comment utiliser cette technique bien encapsulée dans les MFC à partir d'une appli Console ?
C'est ce que ce propose de montrer ce petit article
Il fait suite à :
http://www.cppfrance.com/article.aspx?Val=1473
et il réutilise la classe CObjectPoint de ce projet
en la modifiant (opérateurs) légèrement pour alléger la syntaxe
le Zip contient tout pour faire fonctionner la démo.
Source / Exemple :
Utilisation de la sérialisation en mode console
création d'un projet de test en console
ajout au projet de la classe CObjectPoint (fichiers objectPoint.h et .cpp)
rajout des includes
#include <afxwin.h>
#include "ObjectPoint.h"
basculement du projet en utilisateur des MFC
Project/Settings/General/Using MFC in DLL
Test simple suivant :
#include <afxwin.h>
#include <iostream>
using namespace std;
#include "ObjectPoint.h"
int main()
{
cout << "hello" << endl;
return 0;
}
Utilisation de la sérialisation
Il s'agit d'écrire et de lire dans un CFile à travers l'abstraction CArchive
#include <afxwin.h>
#include "ObjectPoint.h"
int main()
{
//Sauvegarde
char fic[]="test.ser";
{
CFile fichier(fic,CFile::modeCreate | CFile::modeWrite);
char texte[]="ecriture directe";//de taille 17
//écriture directe
fichier.Write(texte, sizeof(texte));
//écriture indirecte
CString str = "indirect - par archive";//de taille qque
CArchive ar(&fichier, CArchive::store);
ar << str;
//écriture d'un objet de la classe CObjetPoint
CObjectPoint p1(CPoint(10,50)), p2(CPoint(50,100));
p1.Serialize(ar);//utilisation de la méthode publique ou bien ...
ar << p2;//...surcharge des opérateurs << et >>
ar.Close();
fichier.Close();
}
//Restauration
{
CFile fichier;
fichier.Open ("test.ser", CFile::modeRead);
char texte [20];
fichier.Read (texte,17);//pas terrible, il faut avoir la taille (il faudrait la stocker aussi)
AfxMessageBox (texte);
CString str;//pas besoin de la taille
CArchive ar (&fichier, CArchive::load);
ar >> str;
AfxMessageBox (str);
//Lecture d'objets de la classe CObjectPoint
CObjectPoint p1, p2;
p1.Serialize(ar);
ar >> p2;
CString s = "1er point:" + CString(p1) + ", 2e point:"+CString(p2);
AfxMessageBox(s);
ar.Close ();
fichier.Close ();
}
return 0;
}
Conclusion :
Ainsi révélée au grand jour, les classes CFile et CArchive sont moins intéressantes que bien cachées à l'intérieur d'un projet Document/vue... mais on voit que l'on peut quand même s'en sortir élégament (avec << et >>)
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.