Те же данные DLL могут быть совместно использованы 2 различными процессами?

У меня есть два различных приложения C#, которые работают одновременно.

Я хотел бы, чтобы они оба смогли получить доступ к тому же "экземпляру" DLL (также в C#).

DLL содержит некоторые данные, которые я хотел бы возвратить тому, какой бы ни из этих двух приложений просит его.

Мой DLL ориентирован на многопотоковое исполнение, таким образом, я надеялся, что это будет возможно, но я не уверен как.

Любая справка или совет очень ценились бы.

6
задан Jelly Amma 3 June 2010 в 02:43
поделиться

4 ответа

Пространство процесса будет другим, поэтому, например, глобальные переменные в DLL будут специфичными для каждого отдельного процесса. Возможно, что код в памяти будет совместно использоваться (Windows обычно использует подсчет ссылок, чтобы сделать эту часть более эффективной).

Если вы хотите обмениваться информацией, к которой осуществляется доступ в DLL между двумя процессами, то вполне вероятно, что потребуется использовать какой-то механизм IPC (межпроцессного взаимодействия), такой как сокеты, общая память, каналы и т. Д. и т. д.

5
ответ дан 17 December 2019 в 04:42
поделиться

Я не знаю, можно ли это сделать на C #, но в C ++ вы также можете использовать разделы общей памяти, если информация для совместного использования не слишком сложна. Вам просто нужно будет синхронизировать доступ к этому ресурсу, например, с помощью мьютекса

Хорошая статья на эту тему: http://www.codeproject.com/KB/threads/SharedMemory_IPC_Threads.aspx

Удачи

0
ответ дан 17 December 2019 в 04:42
поделиться

Это возможно. Вы можете установить DLL в GAC (требуются сборки со строгими именами), чтобы у обоих приложений был легкий доступ к ней.

Или вставьте его в папку, и оба приложения будут искать в этой папке dll.

Статья поддержки MSDN

<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>
0
ответ дан 17 December 2019 в 04:42
поделиться

DLL не имеет экземпляра, она загружается в хост-процесс. Ссылайтесь на сборку в обоих приложениях и используйте ее классы/методы.

Если вы хотите избежать развертывания одной и той же сборки для обоих приложений, вы можете поместить ее в GAC.

0
ответ дан 17 December 2019 в 04:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: