Charge de la même dll à plusieurs reprises
Je veux charger la même dll par exemple Lib.dll plusieurs fois!
-> nécessité de la création d'un nouveau processus (fonction CreateProcess) pour chaque LoadLibrary!
Quelqu'un a un exemple ou quelques conseils?!
Thx et accueille
- Pourquoi voulez-vous vous charger de la même DLL à plusieurs reprises?
- Exactement pourquoi vous voulez charger plusieurs fois? Vous ne pouvez pas charger plusieurs fois dans le même processus. Vous pouvez créer plusieurs processus, et dans la "logique du sens", il ne sera chargée qu'une seule fois pour chaque processus. Notez que dans le "physique" en ce sens, elle peut encore être chargé une fois que le système d'exploitation que vous essayez de charger une fois et la réutilisation de la mémoire de tous les processus (seulement la lecture seule des parties, bien sûr, comme le code et statique des données immuables, rien mutable sera bien entendu de processus spécifiques).
- La dll elle-même charger une autre dll; mais il dépend du paramètre de l'appel qui est à charge. J'ai donc besoin de plusieurs instances!
- Je sais. C'est pourquoi j'ai écrit comment puis-je réaliser cela avec CreateProcess (plus de 1 processus)!
- Ensuite, vous devriez repenser l'architecture, peut-être à l'aide de "session" du système ou de l'utilisation de l'objet COM.
- eh bien, est vous le problème de la façon de charger la dll en plusieurs fois, ou est-il comment créer un processus. Si vous ne savez pas comment créer un processus, c'est ce que vous devriez vous poser (et de poster le code que vous avez essayé d'utiliser).
- stackoverflow.com/questions/3497516/...
Vous devez vous connecter pour publier un commentaire.
Il semble que vous voulez que chaque instance de la DLL à séparer les segments de données. C'est la seule raison que je pense de la question.
Le seul moyen d'y parvenir est de faire en sorte que chaque fois que vous appelez
LoadLibrary
, la DLL a un nom de fichier différent. Copier la DLL dans un fichier temporaire, chaque fois que vous devez à la charge, en veillant à ce que le nom que vous utilisez est différente de toute instance chargée de la DLL.Je l'écho des commentaires ci-dessus qui vous encourage à revoir la conception de l'architecture du système.
Vous ne pouvez pas charger la même DLL plusieurs fois en un seul processus (ou pas et n'ont aucun effet).
De vos commentaires, la DLL n'choses différentes en fonction de l'un des appels de fonction de sorte que vous aurez besoin d'utiliser une "session" système où vous garder à l'écart des ensembles de données pour chaque et de les créer au besoin (via un autre appel) et de passer une poignée ou similaire à chaque appel de fonction. C'est ainsi que la plupart de l'API Win32 œuvres (fichier poignées, poignées de fenêtre, les objets GDI, etc)
Si vous faites de la DLL de COM de l'ordinateur hôte et utiliser les objets COM, puis ce sera géré automatiquement par chaque instance de classe.
Si vous souhaitez utiliser un processus distinct, alors vous pouvez le faire en ayant un nouveau processus a été lancé juste pour l'hôte de la DLL et l'utiliser l'une des nombreuses formes de l'IPC afin de communiquer avec elle.
Vous traitez une DLL comme une instance d'objet. Ce n'est pas du tout combien de travail de Dll. Les dll ne sont pas des objets, ils sont un tas de code et des ressources. Ces choses ne changent pas, peu importe combien de fois vous pourriez théoriquement charger une DLL. Donc, il n'y aurait pas de raison d'en avoir plusieurs instances de la DLL chargées dans le même processus.
C'est un excellent exemple de pourquoi les variables globales ont tendance à être une mauvaise idée. Les données doivent pouvoir être instancié en tant que de besoin.
Donc, si vous avez besoin de plusieurs instances d'un objet à travailler, vous devez concevoir la DLL de faire exactement cela. Comme d'autres l'ont dit, une sorte de session, ou tout simplement un objet que vous pouvez instancier chaque fois que vous voulez.
C'est un résumé de réponse à une question abstraite. Elle aiderait BEAUCOUP si vous pouviez expliquer davantage sur ce que cette DLL n'exactement, et pourquoi vous avez besoin de plusieurs instances de celui-ci.