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 :

[VC++6]Problème de libération de DLL dans une autre


Sujet :

Visual C++

  1. #1
    Vow
    Vow est déconnecté
    Membre expérimenté Avatar de Vow
    Inscrit en
    Janvier 2003
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : Janvier 2003
    Messages : 1 259
    Points : 1 584
    Points
    1 584
    Par défaut [VC++6]Problème de libération de DLL dans une autre
    Bonjour

    Pour expliquer brièvement, j'ai fait une librairie en C sous Visual C++ 6 qui doit utiliser une autre librairie développée sous Borland C++.
    Je fais donc un chargement via la fonction LoadLibrary (plus exactement LoadLibraryEx pour prendre en compte les librairies utilisées par la seconde librairie). Et la libération également via FreeLibrary.
    Ces appels se font lors du DLL_PROCESS_ATTACH et DLL_THREAD_ATTACH du DllMain pour le chargement, et lors du DLL_PROCESS_DETACH et DLL_THREAD_DETACH du DllMain pour la libération.

    Le chargement se fait parfaitement.
    Mais le problème se situe au niveau de la libération : l'appel de DLL_PROCESS_DETACH dans la fonction DllEntryPoint de la librairie appelée, arrive avant mon appel de libération. Et je n'arrive pas à trouver pourquoi.
    Est-ce que quelqu'un pourrait m'éclairer sur le problème ?
    Comment ça se fait ?
    Merci d'avance.
    Il vaut mieux prêter à sourire que donner à réfléchir.

    Je ne réponds pas aux problèmes techniques par MP (il y a les FAQs et le forum pour ça)
    (ex-Responsable Windows/Info Gen&Hardware, loup-garou à ses heures)

    Cliquez sur le bouton si votre problème a trouvé une solution.
    N'oubliez pas non plus de donner la réponse si vous l'avez trouvée !

    Je mords donc je suis
    Une fine lame pour te soutenir

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 568
    Points
    41 568
    Par défaut
    Je ne peux pas vraiment aider là-dessus.

    Ce que je te conseillerais, c'est tout d'abord de vérifier si tu ne peux vraiment pas lier la DLL implicitement au lieu de le faire explicitement.

    Ensuite, si tu dois vrament utiliser la liaison explicite, il est explicitement marqué dans la doc de DllMain() qu'il ne faut PAS appeler LoadLibrary() dedans.
    Do not call LoadLibrary in the entry-point function, because you might create dependency loops in the DLL load order. This can cause a DLL to be used before the system executes its initialization code.

    Similarly, do not call the FreeLibrary function in the entry-point function on detach, because this can cause a DLL to be used after the system executes its termination code.
    À la place, je te conseille d'exporter des fonctions InitXxx() et CleanXxx() pour ta bibliothèque.
    To provide more complex initialization, create an initialization routine for the DLL.
    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.

  3. #3
    Vow
    Vow est déconnecté
    Membre expérimenté Avatar de Vow
    Inscrit en
    Janvier 2003
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : Janvier 2003
    Messages : 1 259
    Points : 1 584
    Points
    1 584
    Par défaut
    Merci pour ta réponse.
    Comme quoi on en apprend tous les jours.
    Malheureusement je ne peux pas exporter les fonctions de chargement et libération des librairies utilisées.
    Il vaut mieux prêter à sourire que donner à réfléchir.

    Je ne réponds pas aux problèmes techniques par MP (il y a les FAQs et le forum pour ça)
    (ex-Responsable Windows/Info Gen&Hardware, loup-garou à ses heures)

    Cliquez sur le bouton si votre problème a trouvé une solution.
    N'oubliez pas non plus de donner la réponse si vous l'avez trouvée !

    Je mords donc je suis
    Une fine lame pour te soutenir

Discussions similaires

  1. Appeler une Dll dans une autre Dll.
    Par cdumargu dans le forum C#
    Réponses: 1
    Dernier message: 07/02/2012, 13h13
  2. Problème de libération de DLL - Web Service
    Par Laurent_75000 dans le forum Web & réseau
    Réponses: 3
    Dernier message: 18/05/2006, 13h25
  3. Réponses: 4
    Dernier message: 16/05/2006, 23h15
  4. Problèmes de libération de Dll en delphi7 sous windows XP
    Par Tardiff Jean-François dans le forum Langage
    Réponses: 5
    Dernier message: 10/01/2006, 15h30
  5. Problème avec une DLL dans une boucle For
    Par BraDim dans le forum Langage
    Réponses: 5
    Dernier message: 20/09/2005, 12h22

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