conteneur de la STL (problème avec DLL et COM)
Bonjour à tous.
J'ai un programme qui utilise les conteneurs de la STL: string, vector, multimap, etc...
Ce programme utilise une DLL, que j'ai remplacé par un composant COM.
Certains conteneurs que j'utilise sont passés par référence à la DLL (et maintenant au composant COM).
Je ne parle plus que de la DLL, car le problème est complètement identique avec le composant COM.
Les conteneurs une fois dans la DLL, se voient attribués de nouvelles données à coup de "push_back". C'est-à-dire qu'il y a allocation de mémoire (faîte par la référence au conteneur).
Il se trouve qu'une fois ces étapes terminées et que l'on se retrouve en dehors de la DLL, et donc dans le programme principal, ces données sont effectivement présentent au sein du conteneur.
Sauf que si je décharge cette DLL, je n'en ai plus besoin, alors le conteneur perd ses données?????
Il me semble alors que les allocations dynamiques de mémoire effectuées dans la DLL, sont détruites au déchargement de celle-ci.
Je ne comprends pas trop, car normalement, la DLL s'exécute dans l'espace d'adressage du processus. Donc la référence de mon conteneur qui alloue de la mémoire, le fait dans cet espace là et ces données ne devraient disparaître que lors de l'arrêt du processus.
Mais il n'en est rien. On dirait donc que la DLL utilise un espace d'adressage qui lui est propre et que lorsque l'on déréférence cette DLL, toutes les données allouées sur cet espace disparaîssent, alors qu'elles ont été allouées par un objet créé en dehors de cette DLL.
Ceci est plutôt gênant. Pour COM c'est pareil lorsque l'on appelle la méthode CoUninitialize();
J'ai vu qu'il existait des allocations de mémoire particulieres à COM, mais pour les conteneurs je ne vais pas les reprogrammer!!!
Quelle est la méthode à utiliser? Ou est-ce qu'il est impossible de faire de l'allocation mémoire dans une DLL ou un composant COM, qui ne soit perdu lors de leur destruction?