powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как по имени или указателю вызвать метод экземпляра класса ?
7 сообщений из 7, страница 1 из 1
Как по имени или указателю вызвать метод экземпляра класса ?
    #39967656
AleksVoronezh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.

Вопрос возможно глупый, но все же. Создается экземпляр класса для работы с COM-портом (используется CPort). Для его события OnRxChar создается обработчик события, как процедура, относящаяся к пользовательскому классу, пользовательский класс также создается по одному на каждый открываемый COM-порт. Это нужно, что бы данные, приходящие от заранее не известного числа портов обрабатывались независимо.

Но как послать данные в нужный порт? При создании экземпляра CPort (TComPort) ему назначается индивидуальное Name, да и указатель, мы же получаем, как результат в конце концов. Подскажите, как можно выполнить, например, метод WriteStr() для нужного экземпляра TComPort ?
...
Рейтинг: 0 / 0
Как по имени или указателю вызвать метод экземпляра класса ?
    #39967663
misha mike
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это нужно, что бы данные, приходящие от заранее не известного числа портов обрабатывались независимо.
Достаточно одного обработчика в одном классе. А разделять источники события по параметру Sender. Через него передается ссылка на экземпляр класса, который в данный момент вызвал обработчик.

Но как послать данные в нужный порт?
Если посылка данных является ответом на входящий блок данных, то через тот же Sender.
...
Рейтинг: 0 / 0
Как по имени или указателю вызвать метод экземпляра класса ?
    #39967680
x1ca4064
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AleksVoronezh
пользовательский класс также создается по одному на каждый открываемый COM-порт. Это нужно, что бы данные, приходящие от заранее не известного числа портов обрабатывались независимо.



Храните ссылку на нужный порт в пользовательском классе
...
Рейтинг: 0 / 0
Как по имени или указателю вызвать метод экземпляра класса ?
    #39967690
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AleksVoronezh
Но как послать данные в нужный порт?

Можно создать список портов с их экземплярами TComPort; "com1" - TComPort1, "com2" - TComPort2.
...
Рейтинг: 0 / 0
Как по имени или указателю вызвать метод экземпляра класса ?
    #39967699
AleksVoronezh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо всем ответившим. На всякий случай, я с самого начала веду массив записей, в элементы которого помещаю имя создаваемого порта и его указатель. Проблема именно в том, что бы обратится к методу нужного экземпляра класса, обслуживающего тот или иной порт. Число портов во врямя работы меняться не будет. Некоторое число портов будет задаваться только во время старта программы.

Посылка данных может никак не зависить от ответа. Ответа может вообще не быть, если это включение лампочки например.

Вот поэтому и хоелось бы сделать полностью независимыми прием данных (это работает, данные далее попадают в Pascal Script, и обрабатываются от каждого порта своей функцией) и оправку данных в нужный "канал" по необходимости.
...
Рейтинг: 0 / 0
Как по имени или указателю вызвать метод экземпляра класса ?
    #39967732
AleksVoronezh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот для теста сделал - кое как работает.

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
For NN:=0 To RS232_Servers_Counter-1 Do
     Begin
       If  RS232_Servers_List[NN].RS232_Server_Name=RS232_Server_Name Then Exit;
     End;


   My_RS232Server:=TComPort.Create(Nil);
   My_RS232Server.Name:=RS232_Server_Name;
   My_RS232Server.BaudRate:=br9600;
   My_RS232Server.Port:='COM9';

   My_RS232_Read_Event:=TMy_RS232_Server.Create; // Создаем экземпляр класса с процедурой, преобразующей получаемые по 
   RS232 данные в строку
   My_RS232Server.OnRxChar:=My_RS232_Read_Event.Data_Read; // Назначаем индивидуальный обработчик событию получения 
   данных по TCP для созданного сервера
   My_RS232_Read_Event.Function_Name_To_Get_RS232_Data:=Function_Name_To_Get_RS232_Data; // Указываем имя функции внутри 
   скрипта, в которую будем возвращать строку полученных данных
   My_RS232Server.Open;

   RS232_Servers_List[RS232_Servers_Counter].RS232_Server_Name:=RS232_Server_Name;
   RS232_Servers_List[RS232_Servers_Counter].RS232_Server_Pointer:=My_RS232Server;
   RS232_Servers_Counter:=RS232_Servers_Counter+1;




Здесь проверка отправки, поиск в цикле нужного экземпляра опускаю.

Код: pascal
1.
2.
3.
       PP:= RS232_Servers_List[0].RS232_Server_Pointer;
       Sender:=PP;
       (Sender As TComPort).WriteStr('ererer');



Все эти экземпляры - TComPort и мой класс по умолчанию наверняка работает в одном потоке?
...
Рейтинг: 0 / 0
Как по имени или указателю вызвать метод экземпляра класса ?
    #39967936
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AleksVoronezh
Проблема именно в том, что бы обратится к методу нужного экземпляра класса, обслуживающего тот или иной порт.

Перебрать список в поиске нужно порта, тут его экземпляр
AleksVoronezh
Код: pascal
1.
RS232_Servers_List[RS232_Servers_Counter].RS232_Server_Pointer:=My_RS232Server;


Хотя, я бы взял TList или TObjectList.

AleksVoronezh
мой класс по умолчанию наверняка работает в одном потоке?

На сколько помню, читает и ожидает в отдельном потоке, остальное - в основном.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как по имени или указателю вызвать метод экземпляра класса ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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