begin process at 2012 05 27 19:12:31
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Tutoriaux

 > LA SÉRIALISATION MFC ACCESSIBLE EN MODE CONSOLE !!!

LA SÉRIALISATION MFC ACCESSIBLE EN MODE CONSOLE !!!


 Information sur la source

Note :
Aucune note
Catégorie :Tutoriaux Niveau :Initié Date de création :23/02/2003 Date de mise à jour :23/02/2003 18:47:19 Vu / téléchargé :3 648 / 159

Auteur : vieuxLion

Ecrire un message privé
Commentaire sur cette source (1)
Ajouter un commentaire et/ou une note

 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
e t 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

  • 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;
  • }
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 &lt;&lt; et &gt;&gt;)

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources du même auteur

Source avec Zip Source avec une capture UN BUFFEROVERRUN : LE DÉBORDEMENT DE PILE
CONNAISSEZ VOUS PRINTF ?
Source avec Zip Source avec une capture Source .NET (Dotnet) C++ MANAGÉ PAR LES HELLO WORLDS (DOTNET)
Source avec Zip SIMPLE MOYEN DE FAIRE UNE DLL À PARTIR DE FONCTIONS CPP
LE VECTEUR EST UN SACRÉ COPIEUR

 Sources de la même categorie

LISTER FICHIERS ET RÉPERTOIRES (MULTIPLATEFORME) par christophedlr
UTILISATION DES TYPELIST EN C++ par wyden
Source avec Zip Source avec une capture QCSSCOMPRESSOR par alphaone
AFFICHAGE D'UN TRIANGLE ISOCELE par nabche
Source avec Zip GESTION D'UNE BIBLOTHEQUE par leclerro19

Commentaires et avis

Commentaire de belallioui le 19/10/2006 23:51:59

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

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,499 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales