Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 07.07.2022, 15:08
ikasjan ikasjan вне форума
Прохожий
 
Регистрация: 07.07.2022
Сообщения: 2
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию Indy SendBuffer старый и новый

В delphi7 при отправки буфера по UDP требовалось указать размер буфера. А в новом - не требуется.

было:
procedure TIdUDPBase.SendBuffer(AHost: string; const APort: Integer; var ABuffer; const AByteCount: integer);

стало:
procedure TIdUDPBase.SendBuffer(const AHost: string; const APort: TIdPort; const ABuffer: TIdBytes); // TIdBytes = array of Byte;


Вопросы возникли:
Это они зачем так сделали?
Как определяется длина массива, если мы передаем только указатель?
Что делать, если у меня количество отправляемых данных все время разное? Каждый раз заново выделять память под буфер?

Последний раз редактировалось ikasjan, 07.07.2022 в 17:32.
Ответить с цитированием
  #2  
Старый 07.07.2022, 18:18
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,004
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

1. Видимо, упростили, т.к. в случае массива его длинна всегда известна.
2. Массив сам хранит в себе свою длинну (если правильно помню, то в -4х байтах)
3. Ну, видимо, да. Тебе все-равно надо конвертировать твои данные в TIdBytes. Или ты их пишешь в массив по указателю на начало? Ну тогда используй SetLength просто...
Ответить с цитированием
  #3  
Старый 07.07.2022, 18:56
ikasjan ikasjan вне форума
Прохожий
 
Регистрация: 07.07.2022
Сообщения: 2
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Раньше просто передавал указатель на абсолютно любой тип данных и его длину. (Или на любой элемент массива.)
А теперь получается перед отправкой надо обязательно создать динамический массив и копировать туда данные. Как-то это накладно с точки зрения производительности.
Ответить с цитированием
  #4  
Старый 08.07.2022, 17:20
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,004
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

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

ЗЫ. В некоторых случаях даже в "старом" виде у тебя в коде копирования вроде как и нет, но оно все-равно есть, просто компилятор делает это за тебя.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 02:01.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter