Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Как организовать связь двух прог?

408
29 сентября 2011 года
Lei fang
265 / / 01.10.2005
Здравствуйте.
Есть у меня необходимость, странная, но все же необходимость.

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

Рассмотрим на примере, чтоб было понятнее.
Есть большое окно ПРОГИ1, и есть мальнькое окно ПРОГИ2. Допустим мне нужно чтоб окно ПРОГИ2 всегда находилось в центре ПРОГИ1.
Собственно, это значит, что если вдруг кто-то перетащил окно ПРОГИ1 или ПРОГИ2, то окно другой из них тоже должно сменить свое положение.

Я планирую скомпилировать одну из прог в сборку. Скорее всего ПРОГУ2, так как она меньше.
Скорее всего такое взаимодействие нужно организовать с помощью хитрого класса, который передать конструктору ПРОГИ2. Только что это должен быть за класс, я не знаю.

Хотелось бы так:
ПРОГА1
Код:
class ЧУДО_КЛАСС
{
   void form_moved(int new_x_top, int new_y_top)
   {
      изменить положение ПРОГИ1;
   }
}
...

//где-то там при запуске
Assembly ass = null;
ass = Assembly.Load(СБОРКА_ПРОГИ2);

Type myclass = ass.GetType("PROGA2.Form1");
object o = Activator.CreateInstance(myclass, new object[] { ЭКЗЕМПЛЯР_ЧУДО_КЛАССА });
Application.Run((Form)o);


ПРОГА2
Код:
class Form1
{
   Form1(ЧУДО_КЛАСС чк)
   {
      что-то с ним делает;
   }

   //главное то, что где-то в коде есть событие смены положения формы
   void FormMoved(EventArgs evt)
   {
      //а как тут оповестить ПРОГУ1 что надо вызывать метод form_moved(int new_x_top, int new_y_top)? :(
   }
}


Надеюсь хоть кто-то понял о чем я писал... Модель клиент-сервер, именованные каналы и sendmessage как-то не хочется делать.
Да и задача не только изменять положения окон, а будет много еще других событий. по сути, ПРОГА1 просто командует ПРОГОЙ2 и должна передавать туда много инфы о событиях. Но и ПРОГА2 тоже может отсылать какие-то события, в общем нужна двухсторонняя связь.

Вдобавок надо как-то сделать чтобы обе проги знали о ЧУДО_КЛАССЕ. Ну или объявить его в обеих, но будут ли они совместимы?
5
29 сентября 2011 года
hardcase
4.5K / / 09.08.2005
Цитата: Lei fang
Вдобавок надо как-то сделать чтобы обе проги знали о ЧУДО_КЛАССЕ. Ну или объявить его в обеих, но будут ли они совместимы?

MarshalByRef + Remoting, либо WCF поверх pipes.

408
30 сентября 2011 года
Lei fang
265 / / 01.10.2005
Благодарю за ответ.
я уже решил эту задачу другим способом. Обявил так сказать ЧУДО_КЛАСС в отдельной сборке, на котрую есть ссылки в обеих прогах. ЧУДО_КЛАСС, по сути просто приниматель команд у меня, так что я создаю его в ПРОГЕ2 и передаю ПРОГЕ1 и наоборот.
так что выходит так:
Код:
class Form1
{
   ЧУДО_КЛАСС чк;

   Form1(ЧУДО_КЛАСС чк)
   {
      this.чк = чк;
   }

   void FormMoved(EventArgs evt)
   {
      чк.form_moved(this.Left, thos.Top); //дает команду ПРОГЕ1 изменить свое положение
   }
}
9.6K
15 января 2012 года
Ozz
32 / / 06.03.2006
Вот так просто и передаёшь? Как? Из рук в руки? Или через флешку? ))))

А знаешь ли ты, что между приложениями не может быть общего пространства памяти, а значит, и объектов?

Попробуй запускать одно приложение в домене второго. Тогда взаимодействие наладить будет проще.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог