Bonjour,
J'ai créé des composants graphiques utilisant GDIPLus à l'aide de l'implémentation faite par Prodigy (http://www.progdigy.com/).
J'ai mis ces composants dans un package Delphi (BPL).
J'utilise ce package dans plusieurs applications. Parfois (rarement) une application ne se ferme pas correctement quand je la quitte: il n'y à plus rien à l'écran mais je peux encore la voir dans la liste de tâche Windows. Je dois alors la tuer manuellement.
L'utilisation de GDIPLus demande une initialisation(GdiplusStartup) et une finalisation (GdiplusShutdown).
J'ai fait des recherches sur Internet et j'ai vu que cette initialisation et finalisation ne pouvait pas ce faire dans une DLL
http://msdn.microsoft.com/en-us/libr...=vs.85%29.aspx
Do not call GdiplusStartup or GdiplusShutdown in DllMain or in any function that is called by DllMain. If you want to create a DLL that uses GDI+, you should use one of the following techniques to initialize GDI+:
* Require your clients to call GdiplusStartup before they call the functions in your DLL and to call GdiplusShutdown when they have finished using your DLL.
* Export your own startup function that calls GdiplusStartup and your own shutdown function that calls GdiplusShutdown. Require your clients to call your startup function before they call other functions in your DLL and to call your shutdown function when they have finished using your DLL.
* Call GdiplusStartup and GdiplusShutdown in each of your functions that make GDI+ calls.
Dans l'implémentation de Prodigy il y a dans l'unité "GDIPOBJ.pas" un appel à GdiplusStartup dans la section Initialization et un appel à GdiplusShutdown dans la section Finalization.
J'ai donc retiré ces deux appels et ajouté deux fonctions InitGDIPLus et FinishGDIPlus que j'appelle directement dans mon application finalle (dans les section Initialization et Finalization d'une de mes unités).
Tout à l'air de marcher (je n'ai cependant pas fait de tests intensifs).
Ce qui m'étonne c'est que quand j'ouvre mon application avec Delphi je peux voir mes composants GDIPlus dans mes TForm sans aucun problème. Poutant dans ce cas il n'y eu aucun appel a la fonction d'initialisation de GDIPlus (GdiplusStatup). Je me demande si cela va durer et si je ne devrais pas faire par exemple un appel à InitGDIPlus et FinishGDIPlus dans une des unités de mon Package de conception.
Quelqu'un à t'il une expérience dans ce domaine ?
Merci d'avance.
Partager