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

C++Builder Discussion :

Gestion de l'exe principal via une(des) DLL(s)


Sujet :

C++Builder

  1. #1
    Membre à l'essai
    Inscrit en
    Mai 2006
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 12
    Points : 10
    Points
    10
    Par défaut Gestion de l'exe principal via une(des) DLL(s)
    Bonsoir,

    J'aimerais savoir comment interagir sur une forme principale depuis une(des)
    bibliothèque(s) dynamique(s).
    Imaginons un exe principal qui soit un container chargé de l'affichage :
    - de la forme principale,
    - du squelette du menu
    et qui doivent prendre en charge des overlays.

    Comment ces derniers peuvent ajouter à la forme principale des composants (dans mon cas une frame avec composants) et des extensions au menu ?

    En bref, comment modifier (communiquer avec) les composants de la forme principale depuis une DLL uniquement par programmation.

    Merci pour toute réponse !

  2. #2
    Membre averti
    Avatar de Altau
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    296
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 296
    Points : 360
    Points
    360
    Par défaut
    Peut être en ayant préalablement appelé une fonction de la DLL par laquelle l'exe lui aura communiqué son handle ou un mutex permettant à la DLL d'envoyer en retour un message à l'exe ?

  3. #3
    Membre actif Avatar de Mattetfamilly
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    182
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 182
    Points : 201
    Points
    201
    Par défaut DLL vous avez dit? Comme c'est bizarre...
    J'entrevois une possibilité:

    Dans la DLL tu dois inclure le fichier d'entête de la Form sur laquelle la DLL doit agir (#include unit1.h, si c'est le nom du fichier de ta Form1, Form principale). Ensuite dans les paramètres de la fonction de la DLL, tu dois passer un paramètre qui correspond à ta form principal.
    Si ta forme principale s'apelle Form1, sa classe s'apelle TForm1.
    Dans ce cas, la fonction de la DLL sera du type:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    bool MyDLLFunction (TForm1 *MyFormInDLL, bool Hiding, TColor NewBackGroundColor)//Seul le paramètre TForm1 est obligatoire, les autres sont là pour l'exemple
    {
    //Ton code
    //Ci après un code exemple:
    MyFormInDLL->Color=NewBackGroundColor;
    MyFormInDLL->Label1->Caption="Couleur arrière plan modifiée par la DLL";
    MyFormInDLL->Caption=MyFormInDLL->Caption+" Couleur modifiée par DLL";
    MyFormInDLL->Visible=Hiding;
    MyFormInDLL->Memo1->Lines->Add(MyFormInDLL->Edit1->Text);
    MyFormInDLL->Memo1->Lines->Add(MyFormInDLL->Edit2->Text);
    MyFormInDLL->Memo1->Lines->Add(IntToStr(MyFormInDLL->Memo1->Lines->Count));
    return MyFormInDLL->Memo2->Modified;
    }

    Toutefois, ce type de lien n'a pas d'intérêt:
    Tu veux agir sur ta Form principale: autant inclure directement la fonctionnalité dans l'exécutable. La DLL n'est pas exploitable par une autre application que celle ci.

    En revanche, cela peut avoir un intérêt si ce n'est pas ton application qui maîtrise la DLL en question en faisant appelle à elle. Cela peut devenir intéressant lorsque tu veux intervenir sur une application à partir d'une autre en modifiant les composant de type TEdit. Mais une fois encore la programmation est trop orientée vers une application pour être intégrée à une DLL.
    La DLL est une bibliothèque de fonctionnalité qui serve d'extension à ton application. Généralement la DLL est utilisée pour génrer des fonctions courantes partageables entre différents programmes. Cette fonctionnalité ne sont pas recompiler à chaque fois que tu crées un nouveau programme. exemple: cryptage / décryptage de données / de fichier ou bien protocoles de communication...

    Peux tu décrire plus précisément ce que tu cherche à faire?

    @+
    Mattetfamilly.

  4. #4
    Membre à l'essai
    Inscrit en
    Mai 2006
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 12
    Points : 10
    Points
    10
    Par défaut Gestion de l'exe principal via une(des) DLL(s)
    Citation Envoyé par Altau
    Peut être en ayant préalablement appelé une fonction de la DLL par laquelle l'exe lui aura communiqué son handle ou un mutex permettant à la DLL d'envoyer en retour un message à l'exe ?
    En laissant de côté le mutex (trop versatile), je retiendrais la technique du 'handle'.
    Mais comment faire sous BCB ?
    Quelqu'un(e) saurait-il me proposer un exemple ?

  5. #5
    Membre averti
    Avatar de Altau
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    296
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 296
    Points : 360
    Points
    360
    Par défaut
    Une fois que tu as imaginé un protocole d'échange entre ta DLL et ton EXE, tu fais envoyer par ta DLL un message à l'EXE (grâce à son handle que tu as préalablement récupéré) par un SendMessage ou un PostMessage dans lequel le wParam et le lParam indiqueront à l'EXE ce qu'il doit faire.

  6. #6
    Membre à l'essai
    Inscrit en
    Mai 2006
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 12
    Points : 10
    Points
    10
    Par défaut Merci !!!!!!!!!!
    Merci à Mattetfamilly et à Altau pour leurs réponses !

    J'ai testé les 2 façons de faire qui sont totalement fonctionnelles.

    Celle d'Altau est "meilleure" dans le cadre d'une portabilité du code sur un autre compilateur Windows.
    Mais je suis accroc à Borland depuis la fin de mes études en 1992 (M...e, je viens de rendre compte que je prends un coup de vieux) aussi je conserve la technique de Mattetfamilly : Passage de paramètre(s).

    D'ailleurs je tiens à m'excuser, il ne fallait que passer un pointeur : J'ai posté plus vite que de réfléchir. Mea Culpa ! (Je suis tellement pris dans mon dev que les trucs C++ basiques me semblent toujours liés à l'IDE et je ne vois pas plus loin que mon nez !)

    Encore merci Mattetfamilly car malgré tout, je me serais embué dans des codes inextricables en pestant contre l'IDE de Borland que, je dis de nouveau, j'adore envers et contre tous

    Mais merci à tous les 2. Et si je devais passer sur un autre compilateur, promis Altau, ta solution sera mienne !

    Pour répondre à ta question Mattetfamilly, je développe un programme de reconnaissance hard/soft dans le style de Sandra, Aida32(actuellement Everest) ou du moins connu mais pourtant le meilleur PC Wizard (Freeware de Franck Delattre, concepteur de CpuZ, et Laurent Kutil. Pour ceux qui liront ce post n'hésitez pas à le télécharger !) et par conséquent mon programme est amené à évoluer constamment.

    Mon programme fonctionne actuellement à merveille mais il a trop mangé de burgers lol (Reconnaissance CPU, Chipsets, SMBUS, DMI, SPD etc. ainsi que le software) bref il explose en taille.
    Aussi je souhaiterais créer un programme "container" qui passerait aux DLL (confinement des fonctionnalités) des infos types telles que les pointeurs de menu, de main frame et autres composants adjacents afin que l'appli charge ces DLL, si les fonctions exportées sont reconnues, et que ces DLL se chargent du reste de manière autonome.

    Avantages :
    1 - Mise à jour ciblées,
    2 - Implémentation facilitée d'un mode DEBUG,
    3 - Portablité (MS Win) simplifiée,
    4 - Offre d'un mode 'Plug-in'.
    Euh et qui plus est, un poids de download allégé pour les clients RTC bien qu'ils soient de moins en moins légion. Mais en dev il ne faut léser personne.

    Encore merci à tous 2 !

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

Discussions similaires

  1. [WD15] Imprimer en PDF via une Librairie DLL
    Par cflo56 dans le forum WinDev
    Réponses: 10
    Dernier message: 21/01/2011, 14h33
  2. Problème pour ouvrir des fichiers .exe et .jar via une page html
    Par coyaote dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 15/02/2007, 12h28
  3. récupération des données via une liste déroulante
    Par rahan_dave dans le forum Access
    Réponses: 1
    Dernier message: 13/10/2005, 12h27
  4. Obtenir des droits Windows via une page ASP
    Par hysteresis dans le forum ASP
    Réponses: 2
    Dernier message: 31/08/2005, 10h31
  5. Réponses: 7
    Dernier message: 20/03/2005, 14h53

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