IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MFC Discussion :

Sérialisation CMap winCE


Sujet :

MFC

  1. #1
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2010
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2010
    Messages : 151
    Par défaut Sérialisation CMap winCE
    Bonjour,

    Je suis actuellement en train de reprendre une application réalisée en Visual C++ pour un système Win CE (ARMv4i) (développé sous eMbedded VC++4).

    Problèmatique :
    Je dois stocker une relation :
    Nom de fichier - date du fichier - commentaire dans le fichier

    Je pense m'orienter vers une CMap<CString, Pair<CString (ou Date), CString>> au moins pour ma structure de travail, mais cette structure doit être persistante.
    Je suis donc à la recherche de piste(s) ou conseils pour sérialiser un objet. J'ai vu différentes méthodes avec CArchive ou Boost, mais je ne sais laquelle choisir, il me semble que CArchive est plus simple à mettre en place.

    Contexte :
    Pour situer le contexte, j'ai une liste de programme sur mon robot (industriel). Ces programmes sont des programmes au format TXT. Une bibliothèque me permet de communiquer entre ma machine winCE et mon robot. Une fonction me permet de récupérer la date de modification de mon programme et une autre de copier ce programme (du robot) sur ma machine. Le commentaire est écrit dans le programme et c'est lui que je dois récupérer. Je ne veux recharger mon fichier Texte uniquement si mon programme à été modifié ; d'où le stockage de la date dans ma structure et le commentaire.

    Qu'en pensez-vous ?

    P.S. : Je ne peux tester qu'en semaine car je n'ai pas le compilateur adéquat avec moi, ni la machine WinCE pour tester.
    P.S.2 : Je dispose pas du débogueur traditionnel car je ne peux pas transférer l'appli du PC vers le WinCE (je suis obligé de transférer en USB).

    Merci d'avance, @+
    Mat

  2. #2
    Membre chevronné

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    426
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 426
    Par défaut
    Salut,

    CString (ou Date)
    Moi je choisirai Date car ça permet de bénéficier des fonctions membres de la classe pour les comparaisons pour déterminer si le fichier est plus récent qu'un autre

    CMap, CString... Tu aurais plus de chances d'avoir une réponse pertinente sur le forum MFC qu'ici!

  3. #3
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    salut,
    boost sur wince si tu arrives a avoir produire les libs pour l'environnement je suis preneur....
    j'ai déjà développé des programmes sous wince la sérialisation ne cause pas de problème , j'ai même fait de la sérialisation socket en wince et pc sans problème, le système de sérialisation prend en charge correctement la sérialisation des types natifs.
    ps: la sérialisation mfc ne prend pas en charge les conteneurs de la stl, tes conteneurs doivent être MFC uniquement...

  4. #4
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2010
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2010
    Messages : 151
    Par défaut
    Citation Envoyé par farscape Voir le message
    salut,
    boost sur wince si tu arrives a avoir produire les libs pour l'environnement je suis preneur....
    j'ai déjà développé des programmes sous wince la sérialisation ne cause pas de problème , j'ai même fait de la sérialisation socket en wince et pc sans problème, le système de sérialisation prend en charge correctement la sérialisation des types natifs.
    ps: la sérialisation mfc ne prend pas en charge les conteneurs de la stl, tes conteneurs doivent être MFC uniquement...
    Bonjour,
    Concernant ma structure, je l'ai finalement scindée en 2, trop de problèmes de compilation pour créer une structure CMap<String, String&, Pair, Pair&>, j'ai aussi tenté avec CMapStringToOb. J'ai finalement fait 2 CMapStringToString (une Nom-Date et une Nom-Commentaire).

    J'ai (contrairement à la logique ) laissé ma date en String car je n'ai besoin que de la comparaison égalitaire.

    Pour la sérialisation, je vais me pencher cet après-midi sur la méthode avec CArchive (lien MSDN) (surtout maintenant que j'ai que des types natifs supportant la sérialisation à sauvegarder).

    @+
    Mat

  5. #5
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    pense a regarder la faq il y a des exemples pour sérialiser.

  6. #6
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2010
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2010
    Messages : 151
    Par défaut
    Citation Envoyé par farscape Voir le message
    pense a regarder la faq il y a des exemples pour sérialiser.
    Merci,

    J'étais sur celui-là : http://cpp.developpez.com/faq/vc/ind...HowToSerialize

    (Supers tutos au passage)

    Plus qu'à faire un mix de tout ça.

  7. #7
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2010
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2010
    Messages : 151
    Par défaut
    Bonjour,

    J'ai donc utilisé CArchive, qui est relativement aisé à mettre en place. Voici comment j'ai fait, si ça peut aider quelqu'un :

    Classe à sérialiser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    // comments.h: interface for the comments class.
    //
    //////////////////////////////////////////////////////////////////////
     
    #if !defined(AFX_COMMENTS_H__DD87B91B_FF34_4CD4_8EA3_3287C14A9F2E__INCLUDED_)
    #define AFX_COMMENTS_H__DD87B91B_FF34_4CD4_8EA3_3287C14A9F2E__INCLUDED_
     
    #if _MSC_VER > 1000
    #pragma once
    #endif // _MSC_VER > 1000
     
    #include <afxcoll.h>
    #include "stdafx.h"
     
    class Comments : public CObject {
    public:
    	//DECLARE_SERIAL(Comments);
    	Comments();
    	virtual ~Comments();
    	void Serialize(CArchive& ar);
    	bool getDate(CString key, CString* retour);
    	bool getComment(CString key, CString* retour);
    	void insere(CString key, CString date);
    	void insere(CString key, CString date, CString commentaire);
    private:
    	CMapStringToString date_;
    	CMapStringToString comm_;
    };
     
    #endif // !defined(AFX_COMMENTS_H__DD87B91B_FF34_4CD4_8EA3_3287C14A9F2E__INCLUDED_)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    // comments.cpp: implementation of the comments class.
    //
    //////////////////////////////////////////////////////////////////////
     
    #include "comments.h"
     
    //////////////////////////////////////////////////////////////////////
    // Construction/Destruction
    //////////////////////////////////////////////////////////////////////
     
    Comments::Comments() {
    		this->date_.InitHashTable(50);
    		this->comm_.InitHashTable(50);
    }
     
    Comments::~Comments() {
    }
     
    void Comments::Serialize(CArchive& ar) {
    	if (ar.IsStoring()) {
    		this->comm_.Serialize(ar);
    		this->date_.Serialize(ar);
    	} else { //IsLoading
    		this->comm_.Serialize(ar);
    		this->date_.Serialize(ar);
    	}
    }
     
    bool Comments::getDate(CString key, CString* retour) {
    	BOOL res;
    	CString str;
    	res =  this->date_.Lookup(key, str);
    	retour->Format(L"%s", str);
    	return res != 0;
    }
     
    bool Comments::getComment(CString key, CString* retour) {
    	BOOL res;
    	CString str;
    	res =  this->comm_.Lookup(key, str);
    	retour->Format(L"%s", str);
    	return res !=0;
    }
     
    void Comments::insere(CString key, CString date) {
    	this->date_.SetAt(key, date);
    }
     
    void Comments::insere(CString key, CString date, CString commentaire){
    	this->date_.SetAt(key, date);
    	this->comm_.SetAt(key, commentaire);
    }
    Fonctions de sérialisation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    /**
    @brief  Fonction de Chargement de la sauvegarde des commentaires
                    Charge le fichier Commentaires.mrf.
    @code
                    m_motoFonc->LoadComment();
    @endcode
    */
    void CMotoFonc::LoadComment() {
    	// Chargement des commentaires JBI
    	CFile file;
    	CString pFileName = "\\DiskOnChip\\PP_APP\\MotoMeca\\Commentaires.mrf";
    	if(file.Open(pFileName, CFile::modeRead)) {
    		CArchive ar(&file, CArchive::load);
    		comm_ = new Comments();
    		comm_->Serialize(ar);
    	} else {
    		comm_ = new Comments();
    	}
    } //End LoadComment
     
    /**
    @brief  Fonction de Sauvegarde des commentaires
                    Sauve les tables dans le fichier Commentaires.mrf.
    @code
                    m_motoFonc->SaveComment();
    @endcode
    */
    void CMotoFonc::SaveComment() {
    	// Sauvegarde des commentaires JBI
    	CFile file;
    	CString pFileName = "\\DiskOnChip\\PP_APP\\MotoMeca\\Commentaires.mrf";
    	if(file.Open(pFileName, CFile::modeCreate | CFile::modeWrite)) {
    		CArchive ar(&file, CArchive::store);
    		comm_->Serialize(ar);
    	}
    } //End SaveComment
    Merci, @+
    Mat

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Sérialisation] StackOverFlowError levée
    Par ptitjack dans le forum Général Java
    Réponses: 9
    Dernier message: 04/11/2004, 13h27
  2. [Serializable][image] Sérialiser une image
    Par Galima dans le forum Graphisme
    Réponses: 7
    Dernier message: 01/07/2004, 18h12
  3. Sérialisation avec sockets
    Par sebi77 dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 03/05/2004, 20h24
  4. [MFC][WinCE] Longueur maxi de CString?
    Par Sunny dans le forum MFC
    Réponses: 3
    Dernier message: 28/01/2004, 14h40
  5. SGBD ou sérialisation
    Par tiboleo dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 07/10/2003, 16h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo