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

Langage C++ Discussion :

Allocation dynamique d'une variable dans une dll -> Crash


Sujet :

Langage C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Avril 2014
    Messages : 2
    Par défaut Allocation dynamique d'une variable dans une dll -> Crash
    Bonjour à tout le monde,

    J'ai créé un programme "MyExe" qui veut charger dynamiquement une dll "MyDllCode".
    Jusque là aucun problème. "MyExe" possède le code de chargement (une classe qui fait les LoadLibrary/GetProcAddress).

    J'ai voulu complexifier mon problème en ajoutant un troisième élément "MyLib", une bibliothèque statique, qui va posséder le code de chargement. "MyExe" va donc inclure "MyLib" (comme si c'était son code).
    "MyDllCode" n'a pas changé.

    Et là, le chargement de la dll fonctionne, le point d'entré est trouvé. L'instance est appelable MAIS toutes les allocations dynamiques me lance une exception.

    Je vous attache mon petit programme (C++ / VS2012 / x64).

    Je pense que la solution à ce problème est plus dans la configuration des propriétés de VS mais je n'ai aucune certitude.

    Merci de votre aide !
    Fichiers attachés Fichiers attachés

  2. #2
    Membre Expert
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    1 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 1 711
    Par défaut
    Hello,

    le problème vient de ton LoadLibraryEx
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    // BTPluginManager.cpp
     
    // remplacer
    //HINSTANCE hGetProcIDDLL = LoadLibraryEx(strDynamicLibraryPath.c_str(), NULL, DONT_RESOLVE_DLL_REFERENCES);
     
    // par
    HINSTANCE hGetProcIDDLL = LoadLibraryEx(strDynamicLibraryPath.c_str(), NULL, 0);
    D'après la doc de LoadLibraryEx
    If this value is used, and the executable module is a DLL, the system does not call DllMain for process and thread initialization and termination. Also, the system does not load additional executable modules that are referenced by the specified module.
    Note Do not use this value; it is provided only for backward compatibility. If you are planning to access only data or resources in the DLL, use LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE or LOAD_LIBRARY_AS_IMAGE_RESOURCE or both. Otherwise, load the library as a DLL or executable module using the LoadLibrary function.
    Il semblerait que la DLL charge des ressources que DONT_RESOLVE_DLL_REFERENCES empêche.

  3. #3
    Candidat au Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Avril 2014
    Messages : 2
    Par défaut
    Merci beaucoup pour cette réponse.

    Je pensais avoir mis LoadLibrary() à la place (quand on fait beaucoup de tests, ça arrive) et j'ai refait le test avec: tout marche (aussi bien dans le programme de test que mon vrai programme).

    Bon ben, je vais prendre des cours pour apprendre à lire moi .....

    Merci encore !

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

Discussions similaires

  1. portée d'une variable dans une fonction dans une méthode
    Par laurentg2003 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 29/06/2009, 19h05
  2. Récupérer le nom d'une colonne d'une table dans une variable
    Par mimi51340 dans le forum Général Java
    Réponses: 4
    Dernier message: 13/03/2008, 14h23
  3. Réponses: 4
    Dernier message: 29/01/2008, 11h12
  4. Réponses: 1
    Dernier message: 15/02/2007, 00h24
  5. Mettre une valeur d'une table dans une variable
    Par Raphou96 dans le forum Access
    Réponses: 5
    Dernier message: 06/02/2006, 15h19

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