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 Delphi Discussion :

Comment détecter la fermeture d'une DLL ?


Sujet :

Langage Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 20
    Par défaut Comment détecter la fermeture d'une DLL ?
    Bonjour à tous,
    Je charge dynamiquement une dll dans un programme (notion de plugin)
    Je gère l'appel aux diverses fonctions de la dll depuis le prog sans difficulté, la dll peut afficher sa propre form et ses fonctionnalités
    Je souhaite pouvoir détecter depuis le programme principal, lorsque la dll est fermée depuis sa propre form
    Avez-vous une idée
    Merci

  2. #2
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 491
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 491
    Par défaut
    salut

    si c'est une dll celle-ci ne se décharge pas toutes seul
    donc c'est a toi de gérer la fermeture dans le onclose de ta forme

    @+ Phil

  3. #3
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 933
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 933
    Par défaut
    Anapurna a raison.

    Une façon simple est d'envoyer un message (PostMessage) à l'application lors de la femeture de ta fiche DLL. Ainsi l'application principale sera notifiée et fera par la même occasion le FreeLibrary.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 20
    Par défaut
    Merci de vos réponses,
    Mon message était peut-être un peu léger, mais vous avez bien compris mon problème, en plus précis effectivement, si je ferme la dll depuis l'appli, je peut réaliser le FreeLibrary, mais si l'utilisateur ferme la form de la dll depuis cette dernière (ce qui est le plus probable dans l'usage normal) je ne savais pas comment informer l'appli pour décharger la DLL.
    Je comprends mieux la réponse de Andnotor, et j'étais arrivé à cette conclusion à force de recherches, et c'est ce que je m'apprêtes à réaliser, mais comment ?
    Pour le PostMessage (de préférence à SendMessage dans ce cas, ça j'ai compris), je vois à peu près.
    Par contre pour intercepter le message dans l'application parente, je n'arrive pas à modéliser la manière.
    Si vous pouvez me mettre sur la voie, merci d'avance.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 20
    Par défaut
    Désolé, mais ne perdez pas trop de temps pour répondre à mon message précédent, j'ai trouvé un tutoriel, ok c'est pas ici, peutêtre ai-je mal cherché, en tout cas il répond à mon besoin, j'ai donc ajouté une partie de ce code dans mon appli à l'unité qui va gérée le pilotage des plugins(dll), cela fonctionne.
    Il me reste une dernière interrogation, comment ou quel contenu affecter au paramètre message, j'ai déjà vu qu'il fallait supérieur à 1024 à priori, donc j'ai testé avec 2047 (choisit au pif), mais après je sèche un peu, il doit y avoir une méthode plus élégante.

  6. #6
    Membre Expert Avatar de guillemouze
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    876
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 876
    Par défaut
    utilise la constante WM_USER pour connaitre le 1er id de message disponible (=1024) en general. si tu veux etre sur que le message que tu utilise ne puisse pas etre envoyé par une autre appli, tu peux utiliser la fonction RegisterMessage (ou RegisterWindowMessage, je sais plus trop), qui te permet de reserver un id de message. c'est utile si c'est la mainWindowProc qui traite ton message (ie. c'est le handle de ton appli qui recoit le message de la dll). Car le probleme qui peut arriver si tu ne reserve pas le message, c'est qu'une autre appli reserve le meme message que toi, et l'envoie en bradcast. du coup tu recois le message que tu crois etre une demande de dechargement de ta dll, mais aui a en fait ete envoyé par une autre appli pour une toute autre raison.

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

Discussions similaires

  1. Comment détecter la fermeture d'une fenêtre par la croix?
    Par man_coef dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 23/06/2008, 16h34
  2. Réponses: 13
    Dernier message: 20/07/2007, 13h51
  3. Comment détecter la fermeture d'une fenêtre?
    Par Masmeta dans le forum C++Builder
    Réponses: 1
    Dernier message: 18/01/2007, 16h02
  4. Comment détecter l'ouverture d'une session, sans dll ?
    Par yosthegost dans le forum Delphi
    Réponses: 4
    Dernier message: 24/05/2006, 19h58
  5. Comment détecter la frappe d'une touche ?
    Par Bubonik software dans le forum C
    Réponses: 17
    Dernier message: 11/12/2003, 21h52

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