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 :

Problème avec la sérialisation


Sujet :

MFC

  1. #1
    Membre très actif Avatar de subzero01
    Inscrit en
    Décembre 2007
    Messages
    281
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Décembre 2007
    Messages : 281
    Par défaut Problème avec la sérialisation
    Bonjour,
    J'ai un étrange problème avec la sérialisation, je vous explique ci dessous.
    J'ai créé une simple application MFC Dialog based, j'y ai mis un btn pour enregistrer mes variables membres de la boite de dialogue dans un fichier en passant par la sérialisation.
    Tout marche comme prévu, les données sont bien enregistrées, et bien récupérées au démarrage de mon application.
    Mais cette récupération de données ne se fait pas si mon application démarre avec Windows !!! (j'ai mis le chemin de mon exe dans la base de registre à l'endroit HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
    Merci de m'aider avec vos points de vue.
    Cordialement.

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 458
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 458
    Par défaut
    Problème de droit d'accès sur le fichier ?
    Personne n'est encore connecté sur la machine donc c'est un compte de service qui le lance, non ?

  3. #3
    Membre très actif Avatar de subzero01
    Inscrit en
    Décembre 2007
    Messages
    281
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Décembre 2007
    Messages : 281
    Par défaut
    Bonjour bacelar,
    j'ai réalisé un petit exemple pour verifier exactement l'endroit où ca marche pas, et j'ai mis des messageboxs,
    l'ouverture du fichier se déroule normalement, mais c'est la lecture dans la fonction Serialize qui ne se fait pas normalement.
    Tu peux toi meme tenter d'essayer en créant une simple Dialog based, et essayant de sauvegarder par exemple l'etat d'un check box dans un fichier avec la sérialisation.
    merci pour la réponse.

  4. #4
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 458
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 458
    Par défaut
    Quelle est la primitive qui ne fonctionne pas ?
    Quel est le code d'erreur retourné ?

  5. #5
    Membre très actif Avatar de subzero01
    Inscrit en
    Décembre 2007
    Messages
    281
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Décembre 2007
    Messages : 281
    Par défaut
    il n'y a pas d'erreur, le probleme c'est que l'objet CArchive passé en paramètre a la methode Serialize ne lit pas les données a partir du fichier, (je rappelle que l'ouverture se passe bien), du coup, mes variables membres ne sont pas initialisées !
    voici une portion du code de la methode serialize:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    void CtestDlg::Serialize(CArchive& ar)
    {
    	if (ar.IsStoring())
    	{	// storing code
    		ar<<m_bCheckState;
    	}
    	else
    	{	// loading code
    		ar>>m_bCheckState;
    	}
    }
    et voici le code de la methode appelante, celle ci est appelée dans OnInitDialog:
    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
    void CtestDlg::LoadParams()
    {
    	//chargement des parametres a partir du fichier des parametres
    	CFile fileParams;
    	CFileException ex;
    	CString strParamFile="test.ini";
    	if(!fileParams.Open(strParamFile,CFile::modeRead, &ex))
    	{
    		if(!fileParams.Open(strParamFile,CFile::modeCreate|CFile::modeWrite))
    			MessageBox("Erreur d'ouverture du fichier de paramètres");
    		//données par défaut
    		m_bCheckState=FALSE;
    		CArchive archive(&fileParams, CArchive::store);
    		Serialize(archive);
    		archive.Close();
    	}
    	else //fichier ouvert en lecture
    	{
    		CArchive archiveParams(&fileParams,CArchive::load);
    		Serialize(archiveParams);
    		archiveParams.Close();
    	}
    	fileParams.Close();
    	//mise a jour des parametres lus dans la serialisation
    	UpdateData(FALSE);
    }
    Merci davance

  6. #6
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 458
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 458
    Par défaut
    Désolé pour ce très long délai.
    Votre code d'exemple utilise un chemin relatif au working directory.
    Rien ne garantit que le Working Directory soit le même entre chaque démarrage.
    Si vous voulez utilisez un chemin relatif à votre exe, utilisez "GetModuleFileName" et "SetCurrentDirectory"
    http://msdn.microsoft.com/en-us/libr...97(VS.85).aspx
    http://msdn.microsoft.com/en-us/libr...30(VS.85).aspx

  7. #7
    Membre très actif Avatar de subzero01
    Inscrit en
    Décembre 2007
    Messages
    281
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Décembre 2007
    Messages : 281
    Par défaut
    bien vu !
    c'est une erreur très bete de ma part de ne pas avoir verifié que le fichier s'est bien ouvert.
    c'est donc l'erreur du chemin relatif comme vous avez dit.
    merci encore.

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

Discussions similaires

  1. Problème de dé-sérialisation d'entité avec rake
    Par supergeoffrey dans le forum Ruby
    Réponses: 1
    Dernier message: 22/08/2012, 11h46
  2. Problème avec Sérialisation des tableaux de Axis 1.4
    Par khoufouq dans le forum Services Web
    Réponses: 1
    Dernier message: 26/07/2012, 09h29
  3. probléme avec la sérialisation
    Par momjunior dans le forum AWT/Swing
    Réponses: 12
    Dernier message: 30/11/2009, 14h21
  4. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10

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