Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.007 c
1-1232613443
harisma
2009-01-22 11:37
2010.01.03
Использование AdjustClientRect


1-1232357960
KiLLiR
2009-01-19 12:39
2010.01.03
Как связать TDateTimePicker с системным временем?


15-1257328731
Kolan
2009-11-04 12:58
2010.01.03
SQLite в Delphi 2009


1-1232557117
du_hast
2009-01-21 19:58
2010.01.03
Работа с CommandBar-ом в Outlook-е


2-1257950877
Alexey
2009-11-11 17:47
2010.01.03
Поток, передача параметра в onTerminated




   Наверх