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

API, COM et SDKs Delphi Discussion :

probleme dll avec compo visuel


Sujet :

API, COM et SDKs Delphi

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 73
    Par défaut probleme dll avec compo visuel
    Bonjour

    Je suis en train de créer un système de plugin pour reduire le poids de mon application. Je suis en phase de test et d'apprentissage. J'ai créer une dll qui a deux procedure :

    - creation d'une Listbox
    - destruction d'une Listbox

    Tout se passe bien jusqu'au moment de detruire la Listbox , voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      DestroyDll := GetProcAddress(HandleDLL, pAnsiChar('DestroyDll'));
    //
      if assigned(DestroyDll) then
        DestroyDll;
    Si je le met dans l'evenement onclose ou ondestroy de ma fiche principale , j'ai une violation d'acces au moment de la fermeture. J'ai donc rajouter un bouton qui appele le code ci dessus. Au moment de liberer la dll ca fonctionne.

    Ma question est donc , comment faire pour detruire la Listbox a la fermeture de l'application?

    Cordialement

  2. #2
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 035
    Par défaut
    Il faut que la TListBox soit créé ET libéré du même côté, cela tu sembles déjà correctement le respecter !
    soit uniquement par la DLL qui fourni une instance et une autre fonction qui libère cette instance comme tu le fais !

    soit uniquement par l'EXE en passant la référence de classe, attention sans BPL la TListBox de l'EXE et la TListBox de la DLL sont considérés comme différentes
    C'est une autre méthode pour instancier l'objet venant d'une DLL

    Pour ma part, je faisais la même chose avec des TForm dans la DLL que j'ancrais dans une TForm de l'EXE
    J'ai même poussé à avoir une TForm dans une DLL ancré dans une TForm d'une autre DLL pour enfin l'ancré dans une TForm de l'EXE

    Ton EXE est si gros pour que tu souhaites le diviser ainsi ?
    Si c'est des composants visuels, un BPL est plus approprié

    Ton code est un peu léger pour comprendre !
    Arrives-tu à le reproduire dans un projet extrêmement simple ?


    Tu peux par exemple, affecter le Parent à nil (depuis EXE) pour forcer la séparation entre la TListBox et son parent qui pourrait tenter de la libérer !
    Puis tu appeles la DLL



    Tiens un sujet très proche : DLL String Pourquoi ça marche sans BORLNDMM.DLL, cela évoque tout ce que j'ai mentionné ci-dessus !
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 73
    Par défaut
    Bonsoir

    En faites le fait d'utiliser la dll en question avec la Listbox n'a juste pour but d'apprendre comment fonctionne l'affichage de composant, c'est pour ca que j'utilise une Listbox. Le but final est de créer des dll pour les différents panel. Comme par exemple l'explorateur de fichier, la gestion du presse papier, etc...

    Un peu comme les plugin de phpedit.

    Sinon pour en revenir au code, j'ai créer une procedure servant a detruire toute mes dll.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    procedure TForm4.freeDll;
    begin
      DestroyDll := GetProcAddress(HandleDLL, pAnsiChar('DestroyDll'));
     
      if assigned(DestroyDll) then
        DestroyDll;
    end;
    Puis je place cette procedure dans l'evenement OnDestroy de la fiche principale. Puis je mes la fonction FreeLibrary. Et la plus un seul bug.

    Merci et bon week end

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

Discussions similaires

  1. Probleme DLL avec l'url
    Par chabacha dans le forum Configuration
    Réponses: 4
    Dernier message: 11/06/2013, 10h30
  2. Réponses: 4
    Dernier message: 02/11/2009, 16h49
  3. Probleme de creation de dll avec codeblock
    Par kiffou78 dans le forum Langage
    Réponses: 4
    Dernier message: 19/08/2009, 16h28
  4. Probléme avec shell32.dll avec wine ?
    Par bonano dans le forum Applications et environnements graphiques
    Réponses: 1
    Dernier message: 14/03/2006, 01h49
  5. probleme d'une DLL avec une page asp
    Par aymane_farissi dans le forum ASP
    Réponses: 3
    Dernier message: 29/09/2005, 16h25

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