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 !
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:
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.
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 ?