Гость
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Общий класс для нескольких проектов / 25 сообщений из 51, страница 1 из 3
07.03.2021, 15:59
    #40051430
jenya7
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Общий класс для нескольких проектов
Я создал Solution - Tests. В Solution я создал несколько ConsoleApp - Test1, Test2, Test3.
И я прогоняю их один за другим Test1.exe, Test2.exe, Test3.exe. Но мне нужен общий класс с глобальными объектами которые я мог бы передавать от Test1.exe к Test2.exe. Как это сделать?
...
Рейтинг: 0 / 0
07.03.2021, 16:14
    #40051431
Roman Mejtes
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Общий класс для нескольких проектов
если программы запускаются последовательно, то все объекты, которые будут созданы в Test1 будут удалены из памяти, когда она завершится и запустится Test2
То есть результаты надо сохранять в файл или перенаправить через console pipes в приложение Test2.
...
Рейтинг: 0 / 0
07.03.2021, 16:32
    #40051436
jenya7
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Общий класс для нескольких проектов
Roman Mejtes
если программы запускаются последовательно, то все объекты, которые будут созданы в Test1 будут удалены из памяти, когда она завершится и запустится Test2
То есть результаты надо сохранять в файл или перенаправить через console pipes в приложение Test2.

так это не результаты это объекты.
я работаю с карточками, скажем 16 выходов (релей) подключенных по USB. производитель карточек дает dll для .Net
я хочу инициализировать девайс в Test1
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
using IAHAL;  //dll  from IA

IADevices iadevs = new IADevices();
IADevice REL1;
IADevice REL2;

void Init_3178()
        {
            IAError ec;
            bool rel1_ex = false;
            bool rel2_ex = false;
            ec = iadevs.DetectAllDevices();
            if (ec != IAError.IA_OK)
                MessageBox.Show(iadevs.GetErrorMessage(ec));
            if (iadevs.Devices.Count == 0)
                MessageBox.Show("No device found");
            else
            {
                foreach (IADevice dev in iadevs)
                {
                    //get the first device with DI functions
                    if (dev.HasDigitalInput || dev.HasDigitalOutput)
                    {
                        // populate device rich box 
                        parent.Print_in_IADeviceListRichBox(dev.UniqueID+" Is Connected\n");
                        if (dev.UniqueID.Contains("01_IA_3178"))
                        {
                            REL1 = dev;
                            relay_rel1 = 0;
                            REL1.WriteDO(0);
                            rel1_ex = true;
                        }
                        else if (dev.UniqueID.Contains("00_IA_3178"))
                        {
                            REL2 = dev;
                            REL2.WriteDO(0);
                            rel2_ex = true;
                        }
                    }
                }
                if (rel1_ex == false)
                {
                    parent.Print_in_IADeviceListRichBox("IA 3178(REL1) is Missing \n");
                    System.Windows.MessageBox.Show("IA 3178 01 is Not Connected");
                }
                if (rel2_ex == false)
                {
                    parent.Print_in_IADeviceListRichBox("IA 3178(REL2) is Missing \n");
                    System.Windows.MessageBox.Show("IA 3178 00 is Not Connected");
                }
            }
        }


а включать-выключать реле в Test2
Код: c#
1.
2.
relay_mask |= (ulong)Math.Pow(2, relay_num - 1);
iaErr = REL1.WriteDO(relay_mask );



тогда
Код: c#
1.
2.
3.
IADevices iadevs = new IADevices();
IADevice REL1;
IADevice REL2;


должны быть глобальными для обеих.
...
Рейтинг: 0 / 0
07.03.2021, 20:31
    #40051467
Сон Веры Павловны
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Общий класс для нескольких проектов
jenya7
должны быть глобальными для обеих.

Ну синглтон же банальный. Если религия не позволяет сделать это в классическом виде, то DI в singleton scope.
...
Рейтинг: 0 / 0
07.03.2021, 20:36
    #40051468
jenya7
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Общий класс для нескольких проектов
Сон Веры Павловны
jenya7
должны быть глобальными для обеих.

Ну синглтон же банальный. Если религия не позволяет сделать это в классическом виде, то DI в singleton scope.

это как? засунуть объекты в dll и линковать его к каждому проекту?
...
Рейтинг: 0 / 0
07.03.2021, 20:42
    #40051471
fkthat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Общий класс для нескольких проектов
jenya7
это как? засунуть объекты в dll и линковать его к каждому проекту?

Ты скажи, что ты имеешь в виду под
jenya7
общий класс с глобальными объектами которые я мог бы передавать от Test1.exe к Test2.exe.

А, впрочем, понял. Это тебе какой-нибудь IPC нужен.
...
Рейтинг: 0 / 0
07.03.2021, 20:46
    #40051473
fkthat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Общий класс для нескольких проектов
Сон Веры Павловны
jenya7
должны быть глобальными для обеих.

Ну синглтон же банальный. Если религия не позволяет сделать это в классическом виде, то DI в singleton scope.

Какой, к лешему, синглетон - у него ведь все по разным процессам (как я понял).
...
Рейтинг: 0 / 0
07.03.2021, 20:58
    #40051475
Roman Mejtes
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Общий класс для нескольких проектов
архитектуру нужно просто нормальную, а не это нечто
идея делать 1 объект на 3 процесса, влечет за собой огромные проблемы с синхронизацией этого объекта, не между потоками, а между процессами.
...
Рейтинг: 0 / 0
07.03.2021, 21:04
    #40051476
jenya7
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Общий класс для нескольких проектов
Roman Mejtes
архитектуру нужно просто нормальную, а не это нечто
идея делать 1 объект на 3 процесса, влечет за собой огромные проблемы с синхронизацией этого объекта, не между потоками, а между процессами.

а как сделать?
...
Рейтинг: 0 / 0
07.03.2021, 21:07
    #40051477
jenya7
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Общий класс для нескольких проектов
fkthat
Сон Веры Павловны
пропущено...

Ну синглтон же банальный. Если религия не позволяет сделать это в классическом виде, то DI в singleton scope.

Какой, к лешему, синглетон - у него ведь все по разным процессам (как я понял).

в принципе я из разных процессов обращаюсь к общим статическим объектам в рамках одного проекта. может то же самое можно делать и с несколькими проектами.
...
Рейтинг: 0 / 0
07.03.2021, 21:21
    #40051481
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Общий класс для нескольких проектов
jenya7
в принципе я из разных процессов обращаюсь к общим статическим объектам в рамках одного проекта.
скорее всего из нескольких потоков, а не процессов.
...
Рейтинг: 0 / 0
07.03.2021, 22:54
    #40051491
jenya7
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Общий класс для нескольких проектов
Shocker.Pro
jenya7
в принципе я из разных процессов обращаюсь к общим статическим объектам в рамках одного проекта.
скорее всего из нескольких потоков, а не процессов.

ну если я инициализирую объект в одном процессе
Код: c#
1.
IADevices iadevs = new IADevices();


я не могу передать указатель на него в другом? можно выделить какую нибудь область shared memory?
...
Рейтинг: 0 / 0
07.03.2021, 23:42
    #40051494
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Общий класс для нескольких проектов
Нет, не можешь. У каждого процесса своя память. Сериализуй свои объекты и передавай между процессами.

Но для чего это тебе вообще нужно, пока неясно.
...
Рейтинг: 0 / 0
07.03.2021, 23:51
    #40051497
fkthat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Общий класс для нескольких проектов
jenya7
в принципе я из разных процессов обращаюсь к общим статическим объектам в рамках одного проекта. может то же самое можно делать и с несколькими проектами.

Ты колдун.
...
Рейтинг: 0 / 0
08.03.2021, 07:56
    #40051510
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Общий класс для нескольких проектов
Может просто взять БД и там хранить "статические объекты" ? Тут SQLite хватит
...
Рейтинг: 0 / 0
08.03.2021, 10:01
    #40051520
jenya7
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Общий класс для нескольких проектов
Dima T
Может просто взять БД и там хранить "статические объекты" ? Тут SQLite хватит

а как это можно хранить в БД?
объект
Код: c#
1.
IADevices iadevs = new IADevices();


это девайсы подключенные по USB.
я его инициализирую. нахожу подключенные карты.
Код: c#
1.
iadevs.DetectAllDevices();


и потом линкую к объекту этой карты
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
IADevice REL1;
IADevice REL2;

foreach (IADevice dev in iadevs)
{
     //get the first device with DI functions
     if (dev.HasDigitalInput || dev.HasDigitalOutput)
     {
          // populate device rich box 
          parent.Print_in_IADeviceListRichBox(dev.UniqueID+" Is Connected\n");
          if (dev.UniqueID.Contains("01_IA_3178"))
          {
               REL1 = dev;
               relay_rel1 = 0;
               REL1.WriteDO(0);
               rel1_ex = true;
          }
          else if (dev.UniqueID.Contains("00_IA_3178"))
          {
               REL2 = dev;
               REL2.WriteDO(0);
               rel2_ex = true;
          }
    }
} 


и потом я с этим REL1 хочу работать в Test2.exe. Неужели это такая сложная задача? Может вынести объекты в глобальный dll или exe где они будут сохраняться?
...
Рейтинг: 0 / 0
08.03.2021, 10:24
    #40051526
Compositum
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Общий класс для нескольких проектов
jenya7
Я создал Solution - Tests. В Solution я создал несколько ConsoleApp - Test1, Test2, Test3.
И я прогоняю их один за другим Test1.exe, Test2.exe, Test3.exe. Но мне нужен общий класс с глобальными объектами которые я мог бы передавать от Test1.exe к Test2.exe. Как это сделать?

А почему именно так? Ведь можно было бы создать один exe, в коде которого последовательно запускать задачи (экземпляры Task). Тогда и объект, содержащий данные, можно будет последовательно передавать из задачи в задачу без использования дополнительного шага предназначенного для хранения промежуточных данных (т.е. без создания файлов, без хранения в БД, без использования брокера сообщений).
...
Рейтинг: 0 / 0
08.03.2021, 11:06
    #40051537
jenya7
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Общий класс для нескольких проектов
Compositum
jenya7
Я создал Solution - Tests. В Solution я создал несколько ConsoleApp - Test1, Test2, Test3.
И я прогоняю их один за другим Test1.exe, Test2.exe, Test3.exe. Но мне нужен общий класс с глобальными объектами которые я мог бы передавать от Test1.exe к Test2.exe. Как это сделать?

А почему именно так? Ведь можно было бы создать один exe, в коде которого последовательно запускать задачи (экземпляры Task). Тогда и объект, содержащий данные, можно будет последовательно передавать из задачи в задачу без использования дополнительного шага предназначенного для хранения промежуточных данных (т.е. без создания файлов, без хранения в БД, без использования брокера сообщений).

это устаревший подход. не гибкий. я взял парадигму - LabView + TestStand. В LabView пишуться модули (*.vi) а TestStand их прогоняет. завтра нужно прогнать другой сиквенс - поменял, добавил, убрал несколько *.vi и всё. решил реализовать тот же принцип в .Net.
скажем есть модуль управления одной картой, есть модуль управления другой картой, и так далее комбинируя модули можно создавать разные сиквенсы. в LabView + TestStand это работает просто отлично.
у меня это работает в .Net. есть менеджер который прогоняет мои модули (exe файлы). но есть моменты как например тот что я описал выше- чтоб включить-выключить одно реле мне каждый раз надо производить процесс инициализации девайсов, поиска карточек а я хочу сделать один раз инициализацию и потом включать-выключать выходы и опрашивать входы.
...
Рейтинг: 0 / 0
08.03.2021, 11:49
    #40051546
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Общий класс для нескольких проектов
jenya7
...
и потом я с этим REL1 хочу работать в Test2.exe. Неужели это такая сложная задача? Может вынести объекты в глобальный dll или exe где они будут сохраняться?

Это противоречит устройству ОС. Объекты хранятся не в dll или exe, а в памяти процесса. Процессы максимально изолированы друг от друга чтобы сбой в одном никак не влиял на другой. У каждого процесса свое адресное пространство, там где у одного в памяти лежит объект А, у другого это место занято объектом В. Поэтому нельзя просто так передать объект из процесса в процесс.
Если интересно как оно устроено - читай Рихтера Windows via C/C++ . Там есть решения, но непростые, тут в двух словах не описать.

Тут как вариант можешь сделать кучу DLL, которые подгружаются в один процесс. Тогда запускающий EXE создаст твои объекты и по очереди загрузит нужные DLL вызывая тесты в них с передачей общих объектов.
...
Рейтинг: 0 / 0
08.03.2021, 11:51
    #40051547
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Общий класс для нескольких проектов
Ну и пусть каждый модуль обращается к единому резидентному сервису, который хранит и удерживает все эти инициализированные классы. То есть непосредственным управлением внешним устройством должен заниматься выделенный (интеграционный, адаптер, драйвер) слой, все остальные (модули, плагины, компоненты) находятся на более высоком уровне абстракции и обращаются к этому сервису, а не общаются напрямую с устройством
...
Рейтинг: 0 / 0
08.03.2021, 12:07
    #40051554
jenya7
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Общий класс для нескольких проектов
Shocker.Pro
Ну и пусть каждый модуль обращается к единому резидентному сервису, который хранит и удерживает все эти инициализированные классы. То есть непосредственным управлением внешним устройством должен заниматься выделенный (интеграционный, адаптер, драйвер) слой, все остальные (модули, плагины, компоненты) находятся на более высоком уровне абстракции и обращаются к этому сервису, а не общаются напрямую с устройством

а как реализовать практически?
...
Рейтинг: 0 / 0
08.03.2021, 12:16
    #40051556
jenya7
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Общий класс для нескольких проектов
Dima T
jenya7
...
и потом я с этим REL1 хочу работать в Test2.exe. Неужели это такая сложная задача? Может вынести объекты в глобальный dll или exe где они будут сохраняться?

Это противоречит устройству ОС. Объекты хранятся не в dll или exe, а в памяти процесса. Процессы максимально изолированы друг от друга чтобы сбой в одном никак не влиял на другой. У каждого процесса свое адресное пространство, там где у одного в памяти лежит объект А, у другого это место занято объектом В. Поэтому нельзя просто так передать объект из процесса в процесс.
Если интересно как оно устроено - читай Рихтера Windows via C/C++ . Там есть решения, но непростые, тут в двух словах не описать.

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

у меня есть опция запустить exe не только как консоль но и визуально. некоторые тесты требуют итерации с оператором. с dll так не получится.
...
Рейтинг: 0 / 0
08.03.2021, 12:17
    #40051557
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Общий класс для нескольких проектов
Как написать свой сервис (службу), легко найти в интернете, тем более, это зависит от твоей среды разработки, которую ты не озвучил.

Как провести границу абстрации между этим сервисом и компонентами - это твоя задача на хорошо подумать, только ты знаком со своей предметной областью. В идеале - это универсальный интерфейс, который принимает от компонента некую команду и передает её устройству. Если устройства слишком разные, может быть получится несколько разных интерфейсов. Так или иначе, служба не выставляет наружу какие-то классы, она принимает команды в каком-то виде (к примеру json), интерпретирует и отправляет нужному устройству.
...
Рейтинг: 0 / 0
08.03.2021, 12:32
    #40051558
jenya7
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Общий класс для нескольких проектов
Shocker.Pro
Как написать свой сервис (службу), легко найти в интернете, тем более, это зависит от твоей среды разработки, которую ты не озвучил.

Как провести границу абстрации между этим сервисом и компонентами - это твоя задача на хорошо подумать, только ты знаком со своей предметной областью. В идеале - это универсальный интерфейс, который принимает от компонента некую команду и передает её устройству. Если устройства слишком разные, может быть получится несколько разных интерфейсов. Так или иначе, служба не выставляет наружу какие-то классы, она принимает команды в каком-то виде (к примеру json), интерпретирует и отправляет нужному устройству.

Шо значит не озвучил cреду разработки - я об ней второй день говорю - .Net - C#.
подключение к USB девайсу это настройка дескрипторов и эндпоинтов. я не особо силен в теории но полагаю что эти настройки можно как то сериализовать и передать, я просто не знаю как. скажем карточки подключенные по серийному порту (UART) с ними вообще проблем нет - порт открыл, порт закрыл, прямой доступ к COM порту из любого exe. если бы все сидели на UART (как это было до сих пор) и темы бы не возникло.
...
Рейтинг: 0 / 0
08.03.2021, 12:46
    #40051562
Compositum
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Общий класс для нескольких проектов
jenya7
это устаревший подход. не гибкий.

А в чём "не гибкость"?. Есть exe-приложение. У него есть подкаталог Extensions, в котором складываются DLL-файлы, в которых определены реализации конкретных задач. Состав и содержимое DLL-файлов может меняться со временем, путём их обновления/удаления/добавления новых. Т.е. если потребуется добавить новые задачи, то их можно собрать в виде дополнительного DLL-файла и поместить в этот подкаталог.

EXE-приложение в процессе своей работы динамически загружает все DLL-файлы из каталога Extensions и смотрит, какие задачи в них реализованы. Дополнительно, рядом с EXE-файлом, находится конфигурационный файл (XML или JSON), описывающий, какие задачи и в каком порядке следует выполнять. По мере необходимости этот конфиг-файл редактируется.

Я не настаиваю - делайте так, как сами посчитаете нужным.
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Общий класс для нескольких проектов / 25 сообщений из 51, страница 1 из 3
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]