2009-12-14 1 views
1

есть ли какая-либо библиотека, образец кода, проект с открытым исходным кодом и т. Д., Помогая мне обмениваться объектами (набором данных, коллекцией, ...) между двумя или более программами с прямым или косвенным доступом к памяти.
Если нет способа сделать это, пожалуйста, покажите мне другие способы заставить мое приложение работать.Как разделить System.Object в памяти между двумя или более программами?

языка: C# .net
Платформа: Vista x64

ответ

0

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

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

+0

они находятся в одном домене. Вы можете объяснить больше, пожалуйста? – Behrooz

+0

Мне интересно, если одна из сборок сделана COM видимой, а другая использует ее как COM-компонент, тогда метод в сборке 1 может быть вызван сборкой 2. Вы можете попробовать это, чтобы посмотреть, работает ли она. – A9S6

+0

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

1

Вы хотите посмотреть на WCF - консолидированное WebServices от Microsoft и рамка Remoting. Он предоставляет несколько вариантов взаимодействия между процессами: от XML до HTTP до двоичного кода по TCP/IP или именованным каналам.

Некоторые дополнительные статьи:

+1

Что это? как это работает? – Behrooz

+4

@behrooz, перейдите по ссылке и прочитайте об этом ... – James

1

Я считаю, что лучше и безопаснее всего было бы проверить Named Pipes с помощью WCF. Прямо из MSDN:

Именованный канал представляет собой объект в ОС Windows ядра операционной системы , такие как секции совместно используемой памяти, что процессы могут использовать для связи. A названный канал имеет имя и может использоваться для односторонней или дуплексной связи между процессами на одной машине.

+0

и как мне отправить System.DataSet (+ 200MB) над ним? – Behrooz

+0

Могу ли я положить 200 МБ памяти в трубу? – Behrooz

+1

если я могу это сделать ==> это цилиндр. – Behrooz

0

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

+0

приложения предназначены для мониторинга изменений и реагирования на них. – Behrooz

0

вы можете использовать файл определенным образом или базы данных или любые другие упорные технологии, обмен сообщения, WCF (или более низкие межпроцессные коммуникационные протоколы)

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

+0

нет никакого способа сделать «специальные хаки», о которых вы говорите? – Behrooz

 Смежные вопросы

  • Нет связанных вопросов^_^