Главная страница
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.023 c
15-1257163293
БарЛог
2009-11-02 15:01
2010.01.03
Опыт использования движков сайтов


2-1257937557
Oleg1963
2009-11-11 14:05
2010.01.03
Компонент в цикле


15-1257248002
XXL
2009-11-03 14:33
2010.01.03
Посоветуйте пожалуйста skin-движок


15-1257334588
XXL
2009-11-04 14:36
2010.01.03
Сантехники от программирования - нужны ли они ?


15-1257003526
stas
2009-10-31 18:38
2010.01.03
пустой exe определяется как троян