La sérialisation mfc accessible en mode console !!!

Soyez le premier à donner votre avis sur cette source.

Vue 4 688 fois - Téléchargée 346 fois

Description

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

Codes Sources

A voir également

Ajouter un commentaire

Commentaire

Messages postés
4
Date d'inscription
vendredi 3 janvier 2003
Statut
Membre
Dernière intervention
12 décembre 2006

salut,

je veux simplement savoir est ce qu'on peut serialiser un objet qui n'est pas sérialisable c'est à dire qui n'a pas la methode "Serialize"
exemple :
un objet appartient a une dll.

je cherche la repence ca fait leng temps
merci de me repondre si possible

bonne nuit

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.