Главная страница
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.48 MB
Время: 0.012 c
1-1231953992
Тыщ
2009-01-14 20:26
2010.01.03
Как использовать строковые константы в asm..end?


15-1256418198
XXL
2009-10-25 01:03
2010.01.03
Давно ли delphimaster рекламирует сомнительные сайты ?


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


15-1256938211
Юрий
2009-10-31 00:30
2010.01.03
С днем рождения ! 31 октября 2009 суббота


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