none
Problème de migration VS2005 -> VS2010 RRS feed

  • Discussion générale

  • Bonjour,

    Mon problème est plutôt délicat, je vais donc essayé d'être le plus clair possible.
    Nous sommes entrain de faire la migration de nos projets de VS2005 à VS2010.

    Nous avons:
    * Un projet "core".
    * Un projet "ui" qui permet de tester les fonctionnalité du "core"
    * Un projet "serveur" qui utilise le "core"

    "ui" et "core" font parties de la même solution.
    "server" link à la compilation avec les .lib de "core"

    L'utilisation de "ui" et "core" fonctionne bien.
    C'est l'utilisation de "server" qui pose problème.

    Si le sénario suivant ce produit: "server" instancie un objet "obj1core" appartenant à "core" et "obj1core" instancie lui même un objet "obj2core" appartenant également à "core".
    Depuis le code de "server" nous pouvons demander à "obj1core" de nous retourner un pointeur sur "obj2core". Cela fonctionne, et le débuguer nous montre que le pointeur pointe bien sur un espace mémoire alloué.
    Par contre, si nous appelons une fonction sur "obj2core", disons "obj2core->anyFunc()", le this-pointeur à l'intérieur de anyFunc() est nul.

    Voici un petit exemple simplifié (mais analogue) pour expliquer mon problème

    void aFuncInServer()
    {
     Obj1core o1;
     Obj2core *o2 = o1.getO2(); // Fonctionne, il est possible de parcourir o2 avec le débugueur
     o2->anyFunc() // Leve une exception "writing access violation", ca le 'this' pointeur est null dans anyFunc
    }
    
    class Obj1core
    {
     Obj2core *o2;
     
     public:
     Obj1core()
     {
      o2 = new Obj2core();
      o2->anyFunc(); // Fonctionne, le résultat est visible au débugueur
     }
     
     Obj2core* getO2() {return o2;}
     
     [...]
    };
    
    
    class Obj2core
    {
     char* str;
     
     public:
     Obj2core()
     {
      str = new char[5];
     }
     
     anyFunc()
     {
      str[0] = 'c'; // Si l'appel vient de aFuncInServer 'this' est null, si l'appel vient de o1 'this' a la bonne valeur
     }
    }

    Toute aide me sera très utile et je vous en remercie d'avance :-)
    mercredi 5 mai 2010 21:33

Toutes les réponses

  • Bonjour,

     

    J’ai reproduit votre exemple mais je n’ai pas rencontre cette exception. Peut-être votre code réel a quelque-chose de diffèrent. Avez-vous essaye de vérifier en debug comment se fait le transfert de référence des que vous faites *o2 = o1.getO2() ?  C’est dans cet endroit que le problème se trouve.

    Cette erreur survient quand vous transférez votre solution sur Visual Studio 2010, ou elle se reproduit également sur les deux versions ?

     

    Cordialement,

    Alex


    Appel à contribution ! http://social.msdn.microsoft.com/Forums/fr-FR/vbasicfr/thread/bd974e0e-5519-4122-b8fc-3b998207c34f
    jeudi 6 mai 2010 12:57