Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.02.2013, 21:45   #1
ДралсяСошибками
Форумчанин
 
Аватар для ДралсяСошибками
 
Регистрация: 31.05.2011
Сообщений: 301
По умолчанию Динамическое поле в record

Приветствую Вас, повелители двоичного 0 и 1!
Есть запись:
Код:
TMyRecord = record
  a: Array of Char;
end;
 
var
  MyRecord: TMyRecord;
...
SetLength(MyRecord.a, 1);
MyRecord.a[0] := 'x';
Send(Socket, MyRecord, SizeOf(MyRecord), 0);
В итоге по сети передаётся указатель на массив
Понимаю что у записи фиксированная длина, но мне хотелось бы передавать данные именно так, возможно ли впихнуть динамический массив в запись?
ДралсяСошибками вне форума Ответить с цитированием
Старый 16.02.2013, 22:13   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
Send(Socket, MyRecord.a[0], Length(MyRecord.a), 0);
не?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 16.02.2013, 22:29   #3
ДралсяСошибками
Форумчанин
 
Аватар для ДралсяСошибками
 
Регистрация: 31.05.2011
Сообщений: 301
По умолчанию

Неа, так больше 4-х байт не впихнуть, я же не создаю динамический массив чтобы отправить 4 байта
ДралсяСошибками вне форума Ответить с цитированием
Старый 16.02.2013, 22:56   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
так больше 4-х байт не впихнуть
Ты пробовал на практике именно так как я написал?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 16.02.2013, 23:16   #5
ДралсяСошибками
Форумчанин
 
Аватар для ДралсяСошибками
 
Регистрация: 31.05.2011
Сообщений: 301
По умолчанию

Код:
SetLength(MyRecord.a, 5);
  MyRecord.a[0] := '1';
  MyRecord.a[1] := '2';
  MyRecord.a[2] := '3';
  MyRecord.a[3] := '4';
  MyRecord.a[4] := '5';
  Send(Socket, MyRecord.a[0], SizeOf(MyRecord.a), 0);
По сетке передаст: 1234

......
Упс, Length вместо SizeOf даёт иной результат, странно( Спасибо)))

Последний раз редактировалось ДралсяСошибками; 16.02.2013 в 23:19. Причина: ((((
ДралсяСошибками вне форума Ответить с цитированием
Старый 16.02.2013, 23:18   #6
ДралсяСошибками
Форумчанин
 
Аватар для ДралсяСошибками
 
Регистрация: 31.05.2011
Сообщений: 301
По умолчанию

А если изменить запись:
Код:
TMyRecord = record
    a: Array of Char;
    b: Integer;
  end;
Возможно ли корректно передать? Так как естественно я создаю запись не для одного поля(

Последний раз редактировалось ДралсяСошибками; 16.02.2013 в 23:27.
ДралсяСошибками вне форума Ответить с цитированием
Старый 17.02.2013, 18:15   #7
3D Hunter
Сумрачная тень
Форумчанин
 
Аватар для 3D Hunter
 
Регистрация: 05.03.2009
Сообщений: 689
По умолчанию

а как вы будете принимать,подумали?и осторожнее с символьным типом,в последних версиях делфи это двухбайтовая величина.передавайте лучше данные типом ansistring:
Код:
Send(Socket,length(str),4,0);
Send(Socket,pointer(str)^,length(str),0);
"ковыряю изнутри" (с)
3D Hunter вне форума Ответить с цитированием
Старый 17.02.2013, 19:14   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Length вместо SizeOf даёт иной результат
Еще бы )
Это инструкция вычисления длины строки а не размера указателя на нее
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Использование record в record Anton911 Общие вопросы Delphi 7 03.05.2012 08:49
Динамическое число полей в Record Alex2391 Общие вопросы Delphi 6 13.02.2011 21:26
В чём различие записей Record от Packed Record? Terran Общие вопросы Delphi 7 08.06.2010 17:14
Record / Packed Record Alex Cones Общие вопросы Delphi 7 11.11.2009 10:43
После ввода в поле по Enter нужно перейти на другое поле! •ScReam•™ Помощь студентам 2 16.06.2009 08:47