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 :

Passage VC6 -> VS2005. Explosion dans la STL


Sujet :

MFC

  1. #1
    Membre éclairé
    Profil pro
    System Integration Project Manager
    Inscrit en
    Octobre 2006
    Messages
    219
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : System Integration Project Manager
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 219
    Par défaut Passage VC6 -> VS2005. Explosion dans la STL
    Bonjour a tous,

    je poste ici, bien qu'il concerne également la STL, car il fallait bien le mettre quelque part et que le pb me semble plus lié à VS 2005 qu' à la STL (mais je peux me tromper ...)

    Apres cette petite intro, venons en au fait.

    Je porte une appli de VC6 sous VS2005 en non managé.

    1er Pb
    Cette appli utilise des lib (de la boite) dans laquelle on utilise std::vector<bool>. Sous VC6, pas de souci, ca passait mais sous VS2005, ca ne compile pas. Voici la complainte du compilo
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    >C:\Program Files\Microsoft Visual Studio 8\VC\include\vector(1468) : error C2039: '_My_actual_offset'*: n'est pas membre de 'std::_Vb_reference<_MycontTy>'
    2>        with
    2>        [
    2>            _MycontTy=std::vector<bool,std::allocator<bool>>
    2>        ]
    2>        C:\Program Files\Microsoft Visual Studio 8\VC\include\vector(1457)*: lors de la compilation de la fonction membre '<Inconnu>' de la classe <Inconnu>
    2>        D:\Noyau\Koelis\VS-2005 - IR 0.5\iconicregistration\Array/DynamicArray.h(369)*: voir la référence à l'instanciation de la classe modèle 'std::_Vb_reference<_MycontTy>' en cours de compilation
    2>        with
    2>        [
    2>            _MycontTy=std::vector<bool,std::allocator<bool>>
    2>        ]
    J'ai trouvé une solution qui consiste a remplacer std::vector<bool> par std::vector<unsigned char> mais ca ne me satisfait pas : ca me parait etre plus de la bidouille !

    Y a-t-il une solution propre pour régler ce pb ?

    2ème Pb
    Pour une raison que j'ignore, lorsque que j'insère des données dans une map vide avec insert, l'appli crashe. J'ai pu contourner une fois le pb mais pas dans les autres cas

    donc 2 questions sur ce 2ème pb:
    1) pq ca fait ca ?
    2) comment corriger ?


    Enfin derniere question sur ce post: est-ce que le fait d'avoir une STL-VC6 et une STL-VS2005 installé sur le meme poste (j'ai encore les 2 IDE) peut etre à l'origine de ces pbs ?

    Toute aide est la bienvenue, merci

    V

  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
    salut,
    j'ai utilisé un vector < bool > sans aucun problème sous vc 2008.
    fait voir ta déclaration ou la ligne désignée par l'erreur.
    si cela explose dans ta map il faudrait voir la définition de la donnée associée a ta map.
    en gros voir ton code de declaration et les classes s'y rapportant.
    voir par si ton constructeur de copie est correcte.
    pour le 3 point les stl sont independantes et associées a chaque compilateur.
    j'ai sur une même machine vc6.0 et VC2008 cela fonctionne sans problèmes.

  3. #3
    Membre éclairé
    Profil pro
    System Integration Project Manager
    Inscrit en
    Octobre 2006
    Messages
    219
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : System Integration Project Manager
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 219
    Par défaut
    Citation Envoyé par farscape Voir le message
    salut,
    j'ai utilisé un vector < bool > sans aucun problème sous vc 2008.
    fait voir ta déclaration ou la ligne désignée par l'erreur.
    en fait, on a creer une classe template CDynamicArray qui s'appuie sur std::vector. Et logiquement, on a spécialisé CDynamicArray<bool> comme std::vector<bool>

    A la compil, j'obtiens ce message _My_actual_offset is not a member of vector<bool> when compiling .......CDynamicArray<bool>

    D'apres un développeur de chez nous, on aurait mixer debug et release mais j'ai beau regarder tous les projects, je ne vois aucune différence

    Citation Envoyé par farscape Voir le message
    si cela explose dans ta map il faudrait voir la définition de la donnée associée a ta map.
    en gros voir ton code de declaration et les classes s'y rapportant.
    voir par si ton constructeur de copie est correcte.
    le 1er cas que j'ai pu corriger etait une
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    map<unsigned int, IRenderingStrategy *>
    . l'insert sur une map vide crashait l'appli. J'ai remplacé la map par un vector et c'est ok !

    Dans le 2eme cas, c'est plus complexe. C'est une map
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     map<CString, CSmartPtr<CRegistrationObject>>
    . Le constructeur par copie de CSmartPtr et CRegistyrationObject a été testé en test unitaire et c'est ok. Ce qui est bizarre c'est que
    1) ca passe sans pb sous VC6 en debug et en release sans assertion en debug
    2) ca passe sans pb en VC8 (VS2005) en debug (pas d'assertion ni d'exception levée) mais ca crashe en release

    Citation Envoyé par farscape Voir le message
    pour le 3 point les stl sont independantes et associées a chaque compilateur.
    j'ai sur une même machine vc6.0 et VC2008 cela fonctionne sans problèmes.
    ok merci.

  4. #4
    Membre éclairé
    Profil pro
    System Integration Project Manager
    Inscrit en
    Octobre 2006
    Messages
    219
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : System Integration Project Manager
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 219
    Par défaut
    eh bien .... apres quelques comparaisons de fichiers vcproj, j'ai enfin resolu le pb

    Dans un projet où on n'avait pas ces pbs, le preprocesseur etait configuré avec
    _HAS_ITERATOR_DEBUGGING=0 et _SECURE_SCL=0

    Pour une raison obscure, _HAS_ITERATOR_DEBUGGING=0 supprime les erreurs de compil en release alors que ca ne devrait avoir d'effet qu'en release (d'apres MSDN)

    Pour le crash a l'exec, ca vient de _SECURE_SCL qui est par defaut a 1. Avec _SECURE_SCL=1, si'il y a une utilisation d'iterateur unsafe (??) ca genere une erreur runtime, sauf si _SECURE_SCL_THROWS est = 1. Dans ce dernier cas, ca leve une exception ...

    Apparemment, faire un acces a un iterateur d'une map vide est considérée comme unsafe (ce qui me parait logique en fait ..)

    voilou, c'est resolu

    V

  5. #5
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 393
    Par défaut
    Eh bien normalement, un itérateur de map vide est safe pour une seule chose: Le comparer à l'itérateur retourné par end().

    C'est sûr, si tu cherches à la déréférencer, tu auras des problèmes...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  6. #6
    Membre éclairé
    Profil pro
    System Integration Project Manager
    Inscrit en
    Octobre 2006
    Messages
    219
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : System Integration Project Manager
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 219
    Par défaut
    ah bas voila, j'ai la reponse ...

    mais dites, au risque de passer pour un ignare ..., où trouvez-vous tuotes ces infos ?? Vous avez la norme en livre de chevet ?

    V

  7. #7
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Citation Envoyé par vdaanen Voir le message
    Vous avez la norme en livre de chevet ?
    Oui pourquoi ? Pas toi ?
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  8. #8
    Membre éclairé
    Profil pro
    System Integration Project Manager
    Inscrit en
    Octobre 2006
    Messages
    219
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : System Integration Project Manager
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 219
    Par défaut
    Citation Envoyé par ram-0000 Voir le message
    Pas toi ?
    Si je savais où la trouver, peut etre .......

  9. #9
    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
    Citation Envoyé par vdaanen Voir le message
    Si je savais où la trouver, peut etre .......
    le livre de Bjarne Soustrup est un bon candidat ....

  10. #10
    Membre éclairé
    Profil pro
    System Integration Project Manager
    Inscrit en
    Octobre 2006
    Messages
    219
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : System Integration Project Manager
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 219
    Par défaut
    Citation Envoyé par farscape Voir le message
    le livre de Bjarne Soustrup est un bon candidat ....
    ah ben celui la je l'ai ... sur mon bureau

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 21/12/2009, 09h01
  2. Passage de paramètre à une fonction dans un G_CALLBACK
    Par Dimitri_87 dans le forum GTK+ avec C & C++
    Réponses: 5
    Dernier message: 15/09/2006, 11h04
  3. une méthode clean blancks dans la stl
    Par Jahjouh dans le forum SL & STL
    Réponses: 9
    Dernier message: 16/03/2006, 21h35
  4. passage d'une variable javascript dans du html
    Par the_ugly dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 01/02/2006, 16h08
  5. [VC6 et MFC] Exception dans MFC42D.dll
    Par Philippe320 dans le forum MFC
    Réponses: 8
    Dernier message: 09/12/2005, 14h14

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