У меня есть два различных приложения C#, которые работают одновременно.
Я хотел бы, чтобы они оба смогли получить доступ к тому же "экземпляру" DLL (также в C#).
DLL содержит некоторые данные, которые я хотел бы возвратить тому, какой бы ни из этих двух приложений просит его.
Мой DLL ориентирован на многопотоковое исполнение, таким образом, я надеялся, что это будет возможно, но я не уверен как.
Любая справка или совет очень ценились бы.
Пространство процесса будет другим, поэтому, например, глобальные переменные в DLL будут специфичными для каждого отдельного процесса. Возможно, что код в памяти будет совместно использоваться (Windows обычно использует подсчет ссылок, чтобы сделать эту часть более эффективной).
Если вы хотите обмениваться информацией, к которой осуществляется доступ в DLL между двумя процессами, то вполне вероятно, что потребуется использовать какой-то механизм IPC (межпроцессного взаимодействия), такой как сокеты, общая память, каналы и т. Д. и т. д.
Я не знаю, можно ли это сделать на C #, но в C ++ вы также можете использовать разделы общей памяти, если информация для совместного использования не слишком сложна. Вам просто нужно будет синхронизировать доступ к этому ресурсу, например, с помощью мьютекса
Хорошая статья на эту тему: http://www.codeproject.com/KB/threads/SharedMemory_IPC_Threads.aspx
Удачи
Это возможно. Вы можете установить DLL в GAC (требуются сборки со строгими именами), чтобы у обоих приложений был легкий доступ к ней.
Или вставьте его в папку, и оба приложения будут искать в этой папке dll.
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="MyAssembly2" culture="neutral" publicKeyToken="307041694a995978"/>
<codeBase version="1.0.1524.23149" href="FILE://C:/Myassemblies/MyAssembly2.dll"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
DLL не имеет экземпляра, она загружается в хост-процесс. Ссылайтесь на сборку в обоих приложениях и используйте ее классы/методы.
Если вы хотите избежать развертывания одной и той же сборки для обоих приложений, вы можете поместить ее в GAC.