Можно ли разделить одни и те же DLL-данные на два разных процесса?

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

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

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

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

Любая помощь или совет будут высоко оценены.

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

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

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

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

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

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

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

              

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

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

    Повеселись

    Если ваша DLL создает именованный MemoryMappedFile (в памяти или на диске), то два приложения могут совместно использовать память, созданную DLL. Каждое приложение будет иметь другой указатель на разделяемую память, но память будет совместно использоваться. Вы должны использовать одно и то же имя для общей памяти, и вы сами по себе, насколько это безопасно для streamов между процессами. (Именованные семафоры или мьютексы будут работать, CriticalSection не будет.)