2010-10-21 7 views

Répondre

5

Depuis un BPL est une DLL, allez le BPL: beaucoup plus facile.

+0

D'accord. Un BPL prend en charge la VCL native qu'une DLL normale ne possède pas. Ce n'est pas une bonne idée de passer des objets VCL à travers des limites de DLL non-BPL. –

+1

J'ai essayé la méthode BPL, mais ça n'a pas l'air aussi facile que je le pensais. En fait, j'ai besoin d'une approche "un seul fichier par paquet", ce qui n'est pas réalisable dans le cas BPL. Donc je fais des plugins DLL. – Paul

0

Cela peut être fait mais c'est un sacré boulot de le faire fonctionner sans erreurs ni problèmes de mémoire. Pour aggraver les choses, vous utiliserez deux VCL dans votre application, une dans votre exécutable et une autre dans la DLL. Votre cadre essaierait de se référer à la DLL VCL, ce qui fournirait des informations très différentes de celles de la VCL EXE. Surtout lors de la vérification des variables globales Screen et Application.
Néanmoins, un cadre n'est rien de plus qu'un contrôle de fenêtre spécial, tout comme les formulaires. Vous pourriez exporter une fonction de votre DLL qui retournerait une valeur de type TFrame. Votre application pourrait appeler cette fonction et ainsi créer le cadre, l'utiliser de toutes les manières qu'elle utilise toutes les autres images. Cependant, il n'aura aucune information spécifique sur les fonctionnalités supplémentaires de votre cadre.
La prochaine chose à faire est de synchroniser les données entre l'EXE et la DLL liée à la VCL. Ce n'est pas très joli. De plus, vous aurez probablement des problèmes lors de l'utilisation de la touche de tabulation pour parcourir les contrôles sur votre écran, car la touche de tabulation ne sera pas en mesure de tabuler en dehors du cadre. Et vous remarquerez quelques autres bizarreries comme celle-ci.
J'ai travaillé sur une application simple qui utilisait des cadres de cette façon. Moi, et deux autres ont passé deux mois à trouver une solution de travail, ce qui a bien fonctionné sans fuites de mémoire et autres problèmes. Avant que nous commencions ce projet, cela semblait être une bonne idée. Ensuite, nous avons décidé qu'il ne s'agissait pas de la solution que nous voulions, donc nous avons fusionné le code des DLL avec le code de l'exécutable pour créer un seul exécutable. C'était mieux comme ça.
Nous avons cependant utilisé une autre alternative. Nous avons commencé à utiliser un composant webbrowser dans la mainform. La DLL contiendrait une page HTML, bien formatée, et un tas de méthodes qui seraient appelées lorsque certaines fonctions spécifiques étaient utilisées. Nous avons eu ce travail dans une application de test simple avec de bons résultats, mais ensuite la société est allée chapitre 11 ... Mon employeur est tombé en panne depuis un accord avec un client mal tourné, laissant l'entreprise avec des dettes énormes. Et donc un projet intéressant terminé ...

Questions connexes