Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / WinForms, .Net Framework Новый топик    Ответить
Топик располагается на нескольких страницах: 1 2 3      [все]
 Общий класс для нескольких проектов  [new]
jenya7
Member

Откуда:
Сообщений: 1349
Я создал Solution - Tests. В Solution я создал несколько ConsoleApp - Test1, Test2, Test3.
И я прогоняю их один за другим Test1.exe, Test2.exe, Test3.exe. Но мне нужен общий класс с глобальными объектами которые я мог бы передавать от Test1.exe к Test2.exe. Как это сделать?

Сообщение было отредактировано: 7 мар 21, 15:52
7 мар 21, 15:59    [22290913]     Ответить | Цитировать Сообщить модератору
 Re: Общий класс для нескольких проектов  [new]
Roman Mejtes
Member

Откуда: г. Пермь
Сообщений: 4159
если программы запускаются последовательно, то все объекты, которые будут созданы в Test1 будут удалены из памяти, когда она завершится и запустится Test2
То есть результаты надо сохранять в файл или перенаправить через console pipes в приложение Test2.
7 мар 21, 16:14    [22290914]     Ответить | Цитировать Сообщить модератору
 Re: Общий класс для нескольких проектов  [new]
jenya7
Member

Откуда:
Сообщений: 1349
Roman Mejtes
если программы запускаются последовательно, то все объекты, которые будут созданы в Test1 будут удалены из памяти, когда она завершится и запустится Test2
То есть результаты надо сохранять в файл или перенаправить через console pipes в приложение Test2.

так это не результаты это объекты.
я работаю с карточками, скажем 16 выходов (релей) подключенных по USB. производитель карточек дает dll для .Net
я хочу инициализировать девайс в Test1
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
relay_mask |= (ulong)Math.Pow(2, relay_num - 1);
iaErr = REL1.WriteDO(relay_mask );


тогда
IADevices iadevs = new IADevices();
IADevice REL1;
IADevice REL2;

должны быть глобальными для обеих.

Сообщение было отредактировано: 7 мар 21, 16:28
7 мар 21, 16:32    [22290919]     Ответить | Цитировать Сообщить модератору
 Re: Общий класс для нескольких проектов  [new]
Сон Веры Павловны
Member

Откуда:
Сообщений: 6154
jenya7
должны быть глобальными для обеих.

Ну синглтон же банальный. Если религия не позволяет сделать это в классическом виде, то DI в singleton scope.
7 мар 21, 20:31    [22290961]     Ответить | Цитировать Сообщить модератору
 Re: Общий класс для нескольких проектов  [new]
jenya7
Member

Откуда:
Сообщений: 1349
Сон Веры Павловны
jenya7
должны быть глобальными для обеих.

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

это как? засунуть объекты в dll и линковать его к каждому проекту?
7 мар 21, 20:36    [22290963]     Ответить | Цитировать Сообщить модератору
 Re: Общий класс для нескольких проектов  [new]
fkthat
Member

Откуда:
Сообщений: 4642
jenya7
это как? засунуть объекты в dll и линковать его к каждому проекту?

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

А, впрочем, понял. Это тебе какой-нибудь IPC нужен.

Сообщение было отредактировано: 7 мар 21, 20:37
7 мар 21, 20:42    [22290966]     Ответить | Цитировать Сообщить модератору
 Re: Общий класс для нескольких проектов  [new]
fkthat
Member

Откуда:
Сообщений: 4642
Сон Веры Павловны
jenya7
должны быть глобальными для обеих.

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

Какой, к лешему, синглетон - у него ведь все по разным процессам (как я понял).
7 мар 21, 20:46    [22290968]     Ответить | Цитировать Сообщить модератору
 Re: Общий класс для нескольких проектов  [new]
Roman Mejtes
Member

Откуда: г. Пермь
Сообщений: 4159
архитектуру нужно просто нормальную, а не это нечто
идея делать 1 объект на 3 процесса, влечет за собой огромные проблемы с синхронизацией этого объекта, не между потоками, а между процессами.
7 мар 21, 20:58    [22290970]     Ответить | Цитировать Сообщить модератору
 Re: Общий класс для нескольких проектов  [new]
jenya7
Member

Откуда:
Сообщений: 1349
Roman Mejtes
архитектуру нужно просто нормальную, а не это нечто
идея делать 1 объект на 3 процесса, влечет за собой огромные проблемы с синхронизацией этого объекта, не между потоками, а между процессами.

а как сделать?

Сообщение было отредактировано: 7 мар 21, 20:57
7 мар 21, 21:04    [22290971]     Ответить | Цитировать Сообщить модератору
 Re: Общий класс для нескольких проектов  [new]
jenya7
Member

Откуда:
Сообщений: 1349
fkthat
Сон Веры Павловны
пропущено...

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

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

в принципе я из разных процессов обращаюсь к общим статическим объектам в рамках одного проекта. может то же самое можно делать и с несколькими проектами.
7 мар 21, 21:07    [22290972]     Ответить | Цитировать Сообщить модератору
 Re: Общий класс для нескольких проектов  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 22306
jenya7
в принципе я из разных процессов обращаюсь к общим статическим объектам в рамках одного проекта.
скорее всего из нескольких потоков, а не процессов.
7 мар 21, 21:21    [22290976]     Ответить | Цитировать Сообщить модератору
 Re: Общий класс для нескольких проектов  [new]
jenya7
Member

Откуда:
Сообщений: 1349
Shocker.Pro
jenya7
в принципе я из разных процессов обращаюсь к общим статическим объектам в рамках одного проекта.
скорее всего из нескольких потоков, а не процессов.

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

я не могу передать указатель на него в другом? можно выделить какую нибудь область shared memory?
7 мар 21, 22:54    [22291001]     Ответить | Цитировать Сообщить модератору
 Re: Общий класс для нескольких проектов  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 22306
Нет, не можешь. У каждого процесса своя память. Сериализуй свои объекты и передавай между процессами.

Но для чего это тебе вообще нужно, пока неясно.
7 мар 21, 23:42    [22291005]     Ответить | Цитировать Сообщить модератору
 Re: Общий класс для нескольких проектов  [new]
fkthat
Member

Откуда:
Сообщений: 4642
jenya7
в принципе я из разных процессов обращаюсь к общим статическим объектам в рамках одного проекта. может то же самое можно делать и с несколькими проектами.

Ты колдун.
7 мар 21, 23:51    [22291008]     Ответить | Цитировать Сообщить модератору
 Re: Общий класс для нескольких проектов  [new]
Dima T
Member

Откуда:
Сообщений: 15698
Может просто взять БД и там хранить "статические объекты" ? Тут SQLite хватит
8 мар 21, 07:56    [22291032]     Ответить | Цитировать Сообщить модератору
 Re: Общий класс для нескольких проектов  [new]
jenya7
Member

Откуда:
Сообщений: 1349
Dima T
Может просто взять БД и там хранить "статические объекты" ? Тут SQLite хватит

а как это можно хранить в БД?
объект
IADevices iadevs = new IADevices();

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

и потом линкую к объекту этой карты
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 где они будут сохраняться?

Сообщение было отредактировано: 8 мар 21, 09:58
8 мар 21, 10:01    [22291046]     Ответить | Цитировать Сообщить модератору
 Re: Общий класс для нескольких проектов  [new]
Compositum
Member

Откуда: Санкт-Петербург
Сообщений: 5967
jenya7
Я создал Solution - Tests. В Solution я создал несколько ConsoleApp - Test1, Test2, Test3.
И я прогоняю их один за другим Test1.exe, Test2.exe, Test3.exe. Но мне нужен общий класс с глобальными объектами которые я мог бы передавать от Test1.exe к Test2.exe. Как это сделать?

А почему именно так? Ведь можно было бы создать один exe, в коде которого последовательно запускать задачи (экземпляры Task). Тогда и объект, содержащий данные, можно будет последовательно передавать из задачи в задачу без использования дополнительного шага предназначенного для хранения промежуточных данных (т.е. без создания файлов, без хранения в БД, без использования брокера сообщений).
8 мар 21, 10:24    [22291053]     Ответить | Цитировать Сообщить модератору
 Re: Общий класс для нескольких проектов  [new]
jenya7
Member

Откуда:
Сообщений: 1349
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 файлы). но есть моменты как например тот что я описал выше- чтоб включить-выключить одно реле мне каждый раз надо производить процесс инициализации девайсов, поиска карточек а я хочу сделать один раз инициализацию и потом включать-выключать выходы и опрашивать входы.

Сообщение было отредактировано: 8 мар 21, 11:07
8 мар 21, 11:06    [22291076]     Ответить | Цитировать Сообщить модератору
 Re: Общий класс для нескольких проектов  [new]
Dima T
Member

Откуда:
Сообщений: 15698
jenya7
...
и потом я с этим REL1 хочу работать в Test2.exe. Неужели это такая сложная задача? Может вынести объекты в глобальный dll или exe где они будут сохраняться?

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

Тут как вариант можешь сделать кучу DLL, которые подгружаются в один процесс. Тогда запускающий EXE создаст твои объекты и по очереди загрузит нужные DLL вызывая тесты в них с передачей общих объектов.
8 мар 21, 11:49    [22291089]     Ответить | Цитировать Сообщить модератору
 Re: Общий класс для нескольких проектов  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 22306
Ну и пусть каждый модуль обращается к единому резидентному сервису, который хранит и удерживает все эти инициализированные классы. То есть непосредственным управлением внешним устройством должен заниматься выделенный (интеграционный, адаптер, драйвер) слой, все остальные (модули, плагины, компоненты) находятся на более высоком уровне абстракции и обращаются к этому сервису, а не общаются напрямую с устройством
8 мар 21, 11:51    [22291090]     Ответить | Цитировать Сообщить модератору
 Re: Общий класс для нескольких проектов  [new]
jenya7
Member

Откуда:
Сообщений: 1349
Shocker.Pro
Ну и пусть каждый модуль обращается к единому резидентному сервису, который хранит и удерживает все эти инициализированные классы. То есть непосредственным управлением внешним устройством должен заниматься выделенный (интеграционный, адаптер, драйвер) слой, все остальные (модули, плагины, компоненты) находятся на более высоком уровне абстракции и обращаются к этому сервису, а не общаются напрямую с устройством

а как реализовать практически?

Сообщение было отредактировано: 8 мар 21, 12:05
8 мар 21, 12:07    [22291098]     Ответить | Цитировать Сообщить модератору
 Re: Общий класс для нескольких проектов  [new]
jenya7
Member

Откуда:
Сообщений: 1349
Dima T
jenya7
...
и потом я с этим REL1 хочу работать в Test2.exe. Неужели это такая сложная задача? Может вынести объекты в глобальный dll или exe где они будут сохраняться?

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

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

у меня есть опция запустить exe не только как консоль но и визуально. некоторые тесты требуют итерации с оператором. с dll так не получится.
8 мар 21, 12:16    [22291100]     Ответить | Цитировать Сообщить модератору
 Re: Общий класс для нескольких проектов  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 22306
Как написать свой сервис (службу), легко найти в интернете, тем более, это зависит от твоей среды разработки, которую ты не озвучил.

Как провести границу абстрации между этим сервисом и компонентами - это твоя задача на хорошо подумать, только ты знаком со своей предметной областью. В идеале - это универсальный интерфейс, который принимает от компонента некую команду и передает её устройству. Если устройства слишком разные, может быть получится несколько разных интерфейсов. Так или иначе, служба не выставляет наружу какие-то классы, она принимает команды в каком-то виде (к примеру json), интерпретирует и отправляет нужному устройству.
8 мар 21, 12:17    [22291101]     Ответить | Цитировать Сообщить модератору
 Re: Общий класс для нескольких проектов  [new]
jenya7
Member

Откуда:
Сообщений: 1349
Shocker.Pro
Как написать свой сервис (службу), легко найти в интернете, тем более, это зависит от твоей среды разработки, которую ты не озвучил.

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

Шо значит не озвучил cреду разработки - я об ней второй день говорю - .Net - C#.
подключение к USB девайсу это настройка дескрипторов и эндпоинтов. я не особо силен в теории но полагаю что эти настройки можно как то сериализовать и передать, я просто не знаю как. скажем карточки подключенные по серийному порту (UART) с ними вообще проблем нет - порт открыл, порт закрыл, прямой доступ к COM порту из любого exe. если бы все сидели на UART (как это было до сих пор) и темы бы не возникло.

Сообщение было отредактировано: 8 мар 21, 12:25
8 мар 21, 12:32    [22291103]     Ответить | Цитировать Сообщить модератору
 Re: Общий класс для нескольких проектов  [new]
Compositum
Member

Откуда: Санкт-Петербург
Сообщений: 5967
jenya7
это устаревший подход. не гибкий.

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

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

Я не настаиваю - делайте так, как сами посчитаете нужным.

Сообщение было отредактировано: 8 мар 21, 12:41
8 мар 21, 12:46    [22291107]     Ответить | Цитировать Сообщить модератору
 Re: Общий класс для нескольких проектов  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 22306
jenya7
Шо значит не озвучил cреду разработки - я об ней второй день говорю - .Net - C#.
Думаешь, этого достаточно?
Как минимум - .Net Framework или .Net Core
8 мар 21, 12:49    [22291108]     Ответить | Цитировать Сообщить модератору
 Re: Общий класс для нескольких проектов  [new]
Compositum
Member

Откуда: Санкт-Петербург
Сообщений: 5967
jenya7
Шо значит не озвучил cреду разработки - я об ней второй день говорю - .Net - C#.

Строго говоря, .Net - C# -это не среда разработки.

Сообщение было отредактировано: 8 мар 21, 12:48
8 мар 21, 12:51    [22291109]     Ответить | Цитировать Сообщить модератору
 Re: Общий класс для нескольких проектов  [new]
jenya7
Member

Откуда:
Сообщений: 1349
Shocker.Pro
jenya7
Шо значит не озвучил cреду разработки - я об ней второй день говорю - .Net - C#.
Думаешь, этого достаточно?
Как минимум - .Net Framework или .Net Core

.NET Framework 4.6.1. а что есть существенная разница? в .Net Core мои фантазии реализуются? :)
8 мар 21, 12:55    [22291112]     Ответить | Цитировать Сообщить модератору
 Re: Общий класс для нескольких проектов  [new]
Compositum
Member

Откуда: Санкт-Петербург
Сообщений: 5967
jenya7
.NET Framework 4.6.1. а что есть существенная разница? в .Net Core мои фантазии реализуются? :)

Разница есть. Не всё то, что есть в .Net Framework, реализовано в .Net Core или .Net 5. Но если вы не будете использовать такие вещи как, к примеру, WCF или WF, то для вас это может быть и не критичным.

Сообщение было отредактировано: 8 мар 21, 12:53
8 мар 21, 12:58    [22291113]     Ответить | Цитировать Сообщить модератору
 Re: Общий класс для нескольких проектов  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 22306
jenya7
.NET Framework 4.6.1. а что есть существенная разница? в .Net Core мои фантазии реализуются? :)
В Net Core принципиально по-другому строится windows-служба
Если вообще нужна служба. Если достаточно будет обычной WF-проги (раз уж нужно взаимодействие с пользователем), которая работает только когда запущена, ну можно и без службы обойтись.
8 мар 21, 13:04    [22291116]     Ответить | Цитировать Сообщить модератору
 Re: Общий класс для нескольких проектов  [new]
Compositum
Member

Откуда: Санкт-Петербург
Сообщений: 5967
jenya7
а как это можно хранить в БД?
объект

Почитайте про сериализацию/десериализацию объектов. Лично я предпочитаю сериализовывать/десериализовывать в формат JSON. Этот формат с некоторых пор, помимо двоичного и XML доступен к использованию "из коробки", причём пользоваться коробочной версией значительно удобней, чем старым, добрым NewtonSoft. К тому же JSON отлично, без дополнительных плясок с бубном, понимают и др. языки, такие как JavaScript/TypeScript и Java (на тот случай, если вам потребуется передать результат на сторону).
8 мар 21, 13:16    [22291121]     Ответить | Цитировать Сообщить модератору
 Re: Общий класс для нескольких проектов  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 22306
тут вопрос только в том, сможет ли он десериализовать состояние класса, который завязан на состояние внешнего устройства. Так все равно может понадобиться некий централизованный сервис, который их удерживает в памяти.
8 мар 21, 13:25    [22291127]     Ответить | Цитировать Сообщить модератору
 Re: Общий класс для нескольких проектов  [new]
Roman Mejtes
Member

Откуда: г. Пермь
Сообщений: 4159
https://docs.microsoft.com/ru-ru/dotnet/standard/io/memory-mapped-files
8 мар 21, 14:06    [22291140]     Ответить | Цитировать Сообщить модератору
 Re: Общий класс для нескольких проектов  [new]
hVostt
Member

Откуда:
Сообщений: 19144
Просмотрел топик, а что про COM даже ещё никто не сказал? :)

Сложно-сложно. Старая школа, создавай COM, регистрируй и общайся через него разными процессами )))
8 мар 21, 14:08    [22291144]     Ответить | Цитировать Сообщить модератору
 Re: Общий класс для нескольких проектов  [new]
jenya7
Member

Откуда:
Сообщений: 1349
Roman Mejtes
https://docs.microsoft.com/ru-ru/dotnet/standard/io/memory-mapped-files

выглядит круто. попробую.
8 мар 21, 14:12    [22291148]     Ответить | Цитировать Сообщить модератору
 Re: Общий класс для нескольких проектов  [new]
Compositum
Member

Откуда: Санкт-Петербург
Сообщений: 5967
jenya7
выглядит круто. попробую.

Мне кажется, что это дорога в Ад. :)
8 мар 21, 14:13    [22291150]     Ответить | Цитировать Сообщить модератору
 Re: Общий класс для нескольких проектов  [new]
jenya7
Member

Откуда:
Сообщений: 1349
Compositum
jenya7
выглядит круто. попробую.

Мне кажется, что это дорога в Ад. :)


начнем с того что методы Write, Read не предоставляют возможности записи объекта. а как сериализовать IADevice REL1; понятия не имею. в принипе я могу открыть обычный файл и писать-читать.

Сообщение было отредактировано: 8 мар 21, 14:24
8 мар 21, 14:27    [22291157]     Ответить | Цитировать Сообщить модератору
 Re: Общий класс для нескольких проектов  [new]
Compositum
Member

Откуда: Санкт-Петербург
Сообщений: 5967
jenya7
а как сериализовать IADevice REL1;

Покажите свою реализацию IADevice, а так же ваш код сериализации.
8 мар 21, 14:43    [22291166]     Ответить | Цитировать Сообщить модератору
 Re: Общий класс для нескольких проектов  [new]
Dima T
Member

Откуда:
Сообщений: 15698
jenya7
как сериализовать IADevice REL1; понятия не имею

Никак скорее всего. Внутри них хэндлы объектов ОС, открытых COM-портов или типа того, их нельзя сериализовать. Они действительны только внутри конкретного процесса.
Есть способ передать хэндл другому процессу DuplicateHandle(), но тут тебе надо в этот класс залезть, чтобы до хэндла добраться. Поэтому не будет работать как ты хочешь.
8 мар 21, 14:49    [22291172]     Ответить | Цитировать Сообщить модератору
 Re: Общий класс для нескольких проектов  [new]
jenya7
Member

Откуда:
Сообщений: 1349
Compositum
jenya7
а как сериализовать IADevice REL1;

Покажите свою реализацию IADevice, а так же ваш код сериализации.


using IAHAL;  //dll  от производителя карты - IA3178

//объекты из dll
IADevices iadevs = new IADevices();
IADevice REL1;
IADevice REL2;

void Init_3178()
{
    IAError ec;
    bool rel1_ex = false;
    bool rel2_ex = false;

    //находим все девайсы подключенные к USB
    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)
              {
                  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;
                  }
            }
        }
    }
}


Сообщение было отредактировано: 8 мар 21, 14:46
8 мар 21, 14:52    [22291173]     Ответить | Цитировать Сообщить модератору
 Re: Общий класс для нескольких проектов  [new]
Compositum
Member

Откуда: Санкт-Петербург
Сообщений: 5967
jenya7,

Вы понимаете, что такое реализация интерфейса? То, что вы сейчас скопировали из своего более раннего сообщения - это вообще не то.

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

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

Как вариант источника информации: тема сериализации/десериализации хорошо разжёвана в главе 17 (Сериализация) книги "C# 7.0. Справочник. Полное описание языка" за авторством Албахари Бен , Албахари Джозеф.

Сообщение было отредактировано: 8 мар 21, 14:59
8 мар 21, 15:02    [22291178]     Ответить | Цитировать Сообщить модератору
 Re: Общий класс для нескольких проектов  [new]
jenya7
Member

Откуда:
Сообщений: 1349
Compositum
jenya7,

Вы понимаете, что такое реализация интерфейса? То, что вы сейчас скопировали из своего более раннего сообщения - это вообще не то.

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

я могу оформить IADevice в отдельный класс но он все равно будет содержать методы и логику иначе как я потом буду управлять картой.
8 мар 21, 15:08    [22291180]     Ответить | Цитировать Сообщить модератору
 Re: Общий класс для нескольких проектов  [new]
Compositum
Member

Откуда: Санкт-Петербург
Сообщений: 5967
jenya7
я могу оформить IADevice в отдельный класс но он все равно будет содержать методы и логику иначе как я потом буду управлять картой.

Так вам же не обязательно сериализовывать именно класс, реализующий этот интерфейс. Вы можете специально для возможности сериализации/десериализации создать отдельный простой класс, содержащий все нужные вам данные, подлежащие передачи на сторону.
8 мар 21, 15:12    [22291182]     Ответить | Цитировать Сообщить модератору
 Re: Общий класс для нескольких проектов  [new]
jenya7
Member

Откуда:
Сообщений: 1349
Compositum
jenya7
я могу оформить IADevice в отдельный класс но он все равно будет содержать методы и логику иначе как я потом буду управлять картой.

Так вам же не обязательно сериализовывать именно класс, реализующий этот интерфейс. Вы можете специально для возможности сериализации/десериализации создать отдельный простой класс, содержащий все нужные вам данные, подлежащие передачи на сторону.

он должен быть статическим?
8 мар 21, 15:18    [22291187]     Ответить | Цитировать Сообщить модератору
 Re: Общий класс для нескольких проектов  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 22306
jenya7
он должен быть статическим?
забудь вообще это слово
8 мар 21, 15:19    [22291189]     Ответить | Цитировать Сообщить модератору
 Re: Общий класс для нескольких проектов  [new]
fkthat
Member

Откуда:
Сообщений: 4642
jenya7
а как это можно хранить в БД?

jenya7
это девайсы подключенные по USB.

Очевидно же, что просто подключить девайс к серверу БД.
8 мар 21, 15:23    [22291191]     Ответить | Цитировать Сообщить модератору
 Re: Общий класс для нескольких проектов  [new]
fkthat
Member

Откуда:
Сообщений: 4642
Compositum
Этот формат с некоторых пор, помимо двоичного и XML доступен к использованию "из коробки"

Бинарную сериализацию из .NET Core выпилили.
8 мар 21, 15:26    [22291192]     Ответить | Цитировать Сообщить модератору
 Re: Общий класс для нескольких проектов  [new]
Compositum
Member

Откуда: Санкт-Петербург
Сообщений: 5967
jenya7
он должен быть статическим?

Нет конечно. Невозможно создавать экземпляры статических классов. Мне кажется, что у вас по части ООП и .NET некоторая каша в голове. Возможно имеет смысл сначала почитать основы и попрактиковаться в создании простеньких консольных приложений аля "Hello World", прежде чем писать боевое приложение. В противном случае вы рискуете "утонуть" в своём же коде. ИМХО.

Сообщение было отредактировано: 8 мар 21, 15:22
8 мар 21, 15:26    [22291193]     Ответить | Цитировать Сообщить модератору
 Re: Общий класс для нескольких проектов  [new]
Compositum
Member

Откуда: Санкт-Петербург
Сообщений: 5967
fkthat
Бинарную сериализацию из .NET Core выпилили.

Не знал. :) Да и не пользовался ею давно в реальных приложениях (только в тестовых консольках, когда экспериментировал с тем, о чём читал в книжках). Даже XML уже давно перестал использовать в пользу JSON.

Сообщение было отредактировано: 8 мар 21, 15:21
8 мар 21, 15:29    [22291194]     Ответить | Цитировать Сообщить модератору
 Re: Общий класс для нескольких проектов  [new]
Dima T
Member

Откуда:
Сообщений: 15698
jenya7
я могу оформить IADevice в отдельный класс но он все равно будет содержать методы и логику иначе как я потом буду управлять картой.

Как ты к карте обращаешься? Хэндлы (HANDLE) объектов виндавса есть? Если есть, то с сериализацией будет засада 22291172
8 мар 21, 18:55    [22291246]     Ответить | Цитировать Сообщить модератору
 Re: Общий класс для нескольких проектов  [new]
jenya7
Member

Откуда:
Сообщений: 1349
Dima T
jenya7
я могу оформить IADevice в отдельный класс но он все равно будет содержать методы и логику иначе как я потом буду управлять картой.

Как ты к карте обращаешься? Хэндлы (HANDLE) объектов виндавса есть? Если есть, то с сериализацией будет засада 22291172

выше я показал код. производитель карты дал dll. через него я нахожу подключенные карты по USB и работаю с ними. так как это USB то непонятно как сохранять объект. скажем в случае UART доступ к COM порту с любого exe тривиален.
9 мар 21, 09:24    [22291403]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: 1 2 3      [все]
Все форумы / WinForms, .Net Framework Ответить