Les mêmes données DLL peuvent-elles être partagées par 2 processus différents?

J’ai deux applications C # différentes qui s’exécutent en même temps.

Je voudrais que les deux puissent accéder à la même “instance” d’une DLL (également en C #).

La DLL contient des données sur lesquelles j’aimerais retourner, quelle que soit l’application demandée par l’une des deux applications.

Ma DLL est thread-safe, donc j’espérais que cela serait possible, mais je ne sais pas comment.

Toute aide ou conseil serait très apprécié.

L’espace de processus sera différent. Ainsi, par exemple, les variables globales de la DLL seront spécifiques à chaque processus. Il est possible que le code en mémoire soit partagé (Windows utilise généralement le comptage de références pour rendre cette partie plus efficace).

Si vous souhaitez partager des informations accessibles dans la DLL entre les deux processus, il semble alors nécessaire d’utiliser un mécanisme de type IPC (communication interprocessus), tel que sockets, mémoire partagée, canaux, etc.

Une DLL n’a pas d’instance, elle est chargée dans un processus hôte. Référencez l’assembly dans les deux applications et utilisez ses classes / méthodes.

Si vous souhaitez éviter de déployer le même assemblage pour les deux applications, vous pouvez le placer dans le GAC .

C’est possible. Vous pouvez installer la DLL dans le GAC (nécessite des assemblys nommés forts) afin que les deux applications puissent y accéder facilement.

Ou collez-le dans un dossier et demandez aux deux applications de rechercher la DLL dans ce dossier.

Article de support MSDN

          

Je ne sais pas si cela peut être fait en C #, mais en C ++, vous pouvez également utiliser des sections de mémoire partagée si les informations à partager ne sont pas trop compliquées. Vous devrez simplement synchroniser l’access à cette ressource en utilisant par exemple un mutex.

Un bon article sur le sujet: http://www.codeproject.com/KB/threads/SharedMemory_IPC_Threads.aspx

S’amuser

Si votre DLL crée un MemoryMappedFile nommé (en mémoire ou sur disque), les deux applications peuvent partager la mémoire créée par la DLL. Chaque application aura un pointeur différent sur la mémoire partagée, mais la mémoire sera réellement partagée. Vous devez utiliser le même nom pour la mémoire partagée et vous êtes autonome en ce qui concerne la sécurité des processus entre les processus. (Les sémaphores nommés ou les mutex fonctionneront, mais pas CriticalSection.)