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