J’aurais besoin d’une explication sur le fonctionnement des dll.
Voila, dans mon programme principal qui est une simple fenêtre avec une boucle habituelle Getmessage, sur une commande passée par l’utilisateur, je suis amené à charger ma dll dans le corps du programme principal et à lui passer la main.
Cette dll contient :
- un point d’entrée commun (APIENTRY dllmain)
- Une fonction (extern "C" __declspec(dllexport) INT WINAPI), celle que j’appelle par mon programme principal
- Quelques fonctions ordinaires purement internes.
- Une callback.
- Chaque fonction de la dll a ses variables internes propres.
- Mais il y a aussi des variables globales propres à la dll et que je pensais communes à l’ensemble des fonctions de la dll.
Ma question porte sur les variables globales à la dll :
Lorsque j’initialise une variable globale de la dll de manière dynamique, par exemple lorsque je passe lors de l’appel à cette dll par le programme principal un paramètre qui est l’adresse d’un buffer du programme principal contenant du texte et que je recopie une fois pour toutes ce texte dans une variable globale propre à ma dll (je m’assure d’ailleurs ensuite que cette variable globale contient bien le texte recopié). Eh bien au bout d’un nombre assez petit d’échanges entre le prog ppal et la dll (la bcle Getmessage qui appelle automatiquement la callback), je m’aperçois que le texte que j’ai recopié dans ma variable globale de la dll et que pourtant je n’utilise plus qu’en lecture a disparu.
Ca ne change rien si je déclare la variable globale en static. Si le texte en question je le déclare manuellement au moment de la compilation comme une constante dans cette même variable globale, il ne disparaît évidemment plus.
Est-ce que ça signifie qu’entre chaque appel de la callback de la dll par la boucle Getmessage du prog ppal, la dll est réinitialisée ? (pourtant après l’avoir chargée je pensais qu’elle restait en mémoire)
Est-ce normal ? Quelle explication ? et si c’est normal, ce qui est curieux c’est que certaines variables globales à la dll initialisées dynamiquement aussi ne disparaissent pas (n0 instance de la dll, ou handle de la fenêtre du prog ppal par exemple).
S’il y a une explication, qu’en est-il des variables propres à chaque fonction de la dll : est-ce que au moins elles, sont conservées entre chaque échange si je les déclare en static ?
Merci
Partager