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 :

[MFC] serialisation (encore ...)


Sujet :

MFC

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 65
    Par défaut [MFC] serialisation (encore ...)
    Bonjour à tous, le est de retour

    A ceux qui m'ont déja lu, le problème reste entier malgré des heures de recherche. Dès que je serialize pour recupérer mes infos tout explose.

    Après étude de la pile des appels, le problème viendrait d'une de mes classes (Celeve)

    j'ai donc essayé de faire la meme chose avec mes autres classes que je dois aussi sérialiser. exactement la meme erreur !!

    J'ai repris le problème à la base en créant un prog bidon avec la classe CItem proposé dans la FAQ (Comment sérialiser des données avec les MFC )

    Le verdict est étonnant : exactement la meme erreur au meme endroit
    lors de la déserialisation un de mes CString contient un truc bizarre, et ça bloque tout soit pendant soit apres la lecture.

    soit il y a une erreur dans la classe CItem, ce qui expliquerai que toutes mes classes plantent aussi car je m'en suis largement inspiré pour ne pas dire plus !!.

    soit je ne concois pas mon projet correctement au début dans les options ????

    soit je répete la meme bétise à chaque fois.

    Bref je suis complétement bloqué par ce problème et ca commence à me

    S'il y a des ames de bonne volonté, le prog bidon est telechargeable à

    http://christ99.free.fr

    Si vous avez la moindre petite idée, n'hésitez pas, je veux bien essayer n'importe quoi pour que ça marche.

    merci à tous.

  2. #2
    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
    bonsoir,
    j'ai compris le probleme .
    le code de la faq fonctionne tres bien en VC6.0
    tout repose sur la specialisation d'une fonction template pour le type utilisateur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    template <> void static AFXAPI SerializeElements <CItem> ( CArchive& ar, 
        CItem* pItem, INT_PTR nCount )
    {
        for ( int i = 0; i < nCount; i++, pItem++ )            
            pItem->Serialize( ar );    
    }
    il se trouve que cette specialisation n'est pas prise en compte sur .net2003 debugger à l'appui.
    a partir de la, la serialisation de la classe n'est pas faite :
    le serialize de Citem n'est pas appelé d'ou l'explosion qui suit derriere.

    donc on tombe sur un probleme de spécialisation de fonction template
    voila j'ai pas encore trouvé comment si c'est un probleme de declaration ,remedier au probleme.
    template quand tu nous tiens

    en fait j'ai bien peur que l'on retombe dans un probleme que j'avais resolu sous vc6 en mettant static dans cette declaration de fonction.
    l'exemple de MSDN faisant ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    class CPerson : public CObject { . . . };
    CArray< CPerson, CPerson& > personArray;
     
    template <> void AFXAPI SerializeElements <CPerson> ( CArchive& ar, 
        CPerson* pNewPersons, INT_PTR nCount )
    {
        for ( int i = 0; i < nCount; i++, pNewPersons++ )
        {
            // Serialize each CPerson object
            pNewPersons->Serialize( ar );
        }
    }
    la declaration de la classe ,la specialisation est au meme endroit dans un .cpp
    ce qui n'est pas tres pratique si on veut utiliser l'objet ailleurs que dans ce
    source .
    mon exemple separe la definition du template Carray et cette fonction et
    j'avais resolu le pb sous vc6 en declarant static SerializeElements.
    et sous vc.net 2003 ça ne fonctionne plus .

    voila ou j'en suis ,misére de misére.

  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
    aaaarf j'ai trouvé
    à force de rechercher pour voir comment c'est traité dans les sources des MFC j'ai trouvé :
    dans le .h de CItem il faut rajouter en dessous de la classe:
    note la signature a changé par rapport aux MFC de vc6.0 .
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    template<> void AFXAPI SerializeElements<CItem> (CArchive& ar, CItem* pElements, INT_PTR nCount);
    dans le .cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    template <> void AFXAPI SerializeElements <CItem> ( CArchive& ar, 
        CItem* pItem, INT_PTR nCount )
    {
        for ( int i = 0; i < nCount; i++, pItem++ )            
            pItem->Serialize( ar );    
    }
     
    IMPLEMENT_SERIAL( CItems, CObject, 0)
    plus de static ..
    la ça fonctionne
    faudra que j'essaye sous vc6 pour voir si ça fonctionne aussi...
    ouf je peux dormir tranquille maintenant

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 65
    Par défaut
    Applaudissement dument mérité

    32 min pour résoudre le problème !!!!!!
    j'ai l'impression que tu n'aimes pas quand ça te résiste !!!!

    Une fois de plus j'étais pas près de trouver le truc. Je ne sais pas comment tu as eu l'idée d'incriminer .net2003

    apres les changements dans prog bidon, tout fonctionne.
    J'ai fait le test ultime avec une classe mon prog d'origine. Ca MARCHE


    PS : je crois que ça mérite un petit ajout dans la FAQ en vue de .net2005
    petite faute de frappe sans importance : IMPLEMENT_SERIAL( CItems, CObject, 0)


  5. #5
    Rédacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Par défaut
    Citation Envoyé par farscape
    aaaarf j'ai trouvé
    Bien joué. Finalement tu as pu passer une bonne nuit.

    Citation Envoyé par Gloubi99
    j'ai l'impression que tu n'aimes pas quand ça te résiste !!!!
    je confirme

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 15/03/2006, 18h48
  2. [MFC] Serialisation et polymorphisme
    Par fmarot dans le forum MFC
    Réponses: 3
    Dernier message: 06/03/2006, 12h44
  3. Réponses: 1
    Dernier message: 15/12/2005, 09h45
  4. [MFC] Serialisation
    Par Gloubi99 dans le forum MFC
    Réponses: 16
    Dernier message: 05/09/2005, 10h53
  5. Réponses: 16
    Dernier message: 29/06/2005, 20h55

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