Salut à tous
J'ai créé un programme qui utilise des plugins. J'avais au départ utilisé des DLL sans interface. Mais d'après beaucoup de monde, c'est mal
J'ai donc commencé à tester des solutions avec des interfaces. Seulement voila, j'ai des gros pépins.
J'ai donc créé un projet vierge avec une fiche et un bouton. J'ai aussi un projet de DLL qui exporte une fonction qui renvoie l'interface en question.
Voici le gabarit de mon interface:
La propriété AppHandle est là pour les tests.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 IPedroTest = interface ['{1665DEEB-3ADB-4185-B21A-BFD75836C3CF}'] //Getters procedure SetAppHandle(const Value: HWND); StdCall; //Setters function GetAppHandle: HWND; StdCall; //publié function Test1: boolean; StdCall; property AppHandle: HWND read GetAppHandle write SetAppHandle; end;
Voici l'implémentation de Test1 qui ne fait que créer et afficher une fiche de façon modale:
Je récupère donc ma procédure dans la DLL qui me crée l'interface. Je lance alors la procédure Test1.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 function TTest.Test1: boolean; begin // Application.Handle := AppHandle; // with TDLLForm.Create(Application) do with TDLLForm.Create(nil) do try Result := ShowModal = mrOk; finally Free; end; end;
La fiche s'affiche bien mais:
- Lorsque je ferme cette fiche, tout le projet se ferme. Si je suis en mode Debug (F9), j'ai droit à une AV. Sinon, tout se ferme sans autre forme de procès.
- La fiche de la DLL a son propre bouton dans la barre des tâches en plus de celle du programme principal ce que je ne veux pas. En passant le Handle de l'application et en initialisant Application.Handle := FAppHandle, le bouton ne s'affiche plus MAIS (il y en a toujours un) le bouton du programme principal n'est pas enfoncé. Si je clique dessus, la fiche principale désactivé repasse devant la fiche de la DLL... Il faut ensuite faire Alt-Tab pour revenir sur la fiche modale.
Je ne sais pas si je suis bien clair Quoi qu'il en soit, ma question est: Qu'est-ce que j'ai oublié?? Ou alors, plus généralement: Comment utiliser une fiche avec une interface sans qu'il y ait tous ces défauts?
Merci d'avance
PS: pour ceux qui veulent tester, voici mon projet de test (Le GUID est certainement à changer (Ctrl+Shift+G)):
http://pedro.developpez.com/divers/test_interface.zip
Partager