Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.01.03;
Скачать: CL | DM;

Вниз

record c case   Найти похожие ветки 

 
Scot Storch   (2009-11-12 11:19) [0]

Можно ли не указывать фактический размер для переменной string

type
 PRequestMsg = ^TRequestMsg;
 TRequestMsg = record
   From: string;
   Msg: string;
   case IsPrivate: Boolean of
     True: (
             To_: string[255]
            );
 end;


 
Сергей М. ©   (2009-11-12 11:35) [1]

Нельзя, если установлен крыжик Huge Strings в опциях компилятора в св-вах проекта


 
Scot Storch   (2009-11-12 11:45) [2]

Отключать опции в настройках компилятора что-то желания нет. Может дадите совет как лучше организовать передачу запросов между клиентом и сервером. Пока что попытался сделать ввиде одного общего record c case, вот как-то так:


 PRequest = ^TRequest;
 TRequest = packed record
   case Id: Integer of
     0: (Name : string[16];); // connect
     1: (From : string[16]; // send message
         Msg : string[255];
         case IsPrivate: Boolean of
           True: (_To : string[16];););
     3: (Users: strings[255]); // update users
   end;


Не устраивает указание размерности.


 
Григорьев Антон ©   (2009-11-12 12:38) [3]

А зачем передавать фиксированную структуру на все случаи жизни? Сначала передаёте, например, номер типа пакета, потом все данные, которые относятся к данному типу. А получатель сначала читает тип пакета, а потом по очереди все данные, которые относятся к пакету данного типа.

А в вашем случае получается, например, что в пакете типа 0 всего 21 байт полезный, а ещё 274 - лишний хвост, который имеет смысл только для пакета типа 1. Перерасход трафика в 14 раз. Не жалко?

Кстати, если вы думаете, что запихнув обычный string (без указания размера) в record и передав этот record по сети, вы передадите строку, то сильно заблуждаетесь. http://www.delphikingdom.com/asp/viewitem.asp?catalogid=1206#06


 
Сергей М. ©   (2009-11-12 12:47) [4]


> как лучше организовать передачу


На стороне передатчика:
1. Передать размер данных
2. Передать сами данные

На стороне приемника:
1. Принять размер данных
2. Принять сами данные размера, полученного в п.1


 
Anatoly Podgoretsky ©   (2009-11-12 13:24) [5]


> Можно ли не указывать фактический размер для переменной
> string

Можно и это легко проверить.



Страницы: 1 вся ветка

Текущий архив: 2010.01.03;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.016 c
15-1257283812
Юрий
2009-11-04 00:30
2010.01.03
С днем рождения ! 4 ноября 2009 среда


15-1256845098
koha!
2009-10-29 22:38
2010.01.03
Упал Linux


15-1256888189
Сергей М.
2009-10-30 10:36
2010.01.03
О птице в облаках


15-1257172006
Loky1984
2009-11-02 17:26
2010.01.03
Не запускается Delphi6


15-1256640147
ZeroDivide
2009-10-27 13:42
2010.01.03
IsDelphiDead.com