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

Visual C++ Discussion :

Problème d'accés mémoire entre un exe et sa dll


Sujet :

Visual C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2009
    Messages
    2
    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 : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2009
    Messages : 2
    Par défaut Problème d'accés mémoire entre un exe et sa dll
    Bonjour,

    J'ai un EXE qui utilise une DLL.
    Dans mon EXE, j'ai une classe MyClass, j'appelle une fonction function(MyClass *pMyClass) en C située dans la DLL, en lui passant un pointeur pMyClass.

    Dans ma fonction je reçois bien le pointeur pMyClass, avec l'adresse correcte de mon objet MyClass.

    Lorsque j'accède à un membre de cet objet, je prends un GPF (Global Protection Fault). En effet, bien que l'adresse soit bonne, le membre en question, qui est un pointeur vers un buffer, est NULL.

    Dans l'EXE:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    MyClass
    {
        char *pBuffer;
        maMethode();
    }
     
    MyClass::maMethode()
    {
        .......
        pBuffer = new char [size];
        function(this);
        .......
    }
    Dans la DLL

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function(MyClass *pMyClass)
    {
        ........
        memcpy(pMyClass->pBuffer, something, sizeof(something));
        ........
    }

    Le pointeur pMyClass est juste, par contre, pMyClass->pBuffer contient NULL

    A noter que: En mode Debug, ça fonctionne parfaitement, mais en release, ça plante, comme si l'espace mémoire attribué à l'EXE était différent de celui attribué à la DLL.

    Est-ce que quelqu'un aurait une idée sur ce problème?

    Merci

    Christian

  2. #2
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2009
    Messages
    2
    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 : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2009
    Messages : 2
    Par défaut [Résolu:] Problème d'accés mémoire entre un exe et sa dll
    C'était un des modules compilé en debug (/Zi) et qui utilisait la DLL multi-threading en mode debug (/MDd). Qui avait échappé à ma vigilance. ;o)

  3. #3
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 489
    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 489
    Par défaut
    Passez à la fonction le pointeur sur le buffer plutôt le pointeur sur l'objet.

    Cela rendra votre code bien plus robuste et simple car vous n'aurez pas à synchroniser les C-Runtime, les .h, les options de compilation etc. entre le projet de l'exécutable et celui de la dll.

    Ce problème illustre un souci de conception. Vous ne devriez pas être obligé de synchroniser les deux projets si vous ne passez abusivement des pointeurs sur objet.

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

Discussions similaires

  1. compatibilté entre un exe et une dll
    Par damiengif dans le forum Visual C++
    Réponses: 1
    Dernier message: 25/02/2013, 17h22
  2. Réponses: 1
    Dernier message: 24/01/2013, 12h08
  3. Problème d'accès mémoire
    Par bartmanb dans le forum C
    Réponses: 16
    Dernier message: 15/01/2008, 22h16
  4. Réponses: 12
    Dernier message: 01/03/2007, 11h28
  5. Partage de mémoire entre 2 exe
    Par ejaecker dans le forum Delphi
    Réponses: 12
    Dernier message: 09/09/2006, 15h03

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