![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
record c case
Scot Storch © (2009-11-12 11:19:00)Можно ли не указывать фактический размер для переменной string
type
PRequestMsg = ^TRequestMsg;
TRequestMsg = record
From: string;
Msg: string;
case IsPrivate: Boolean of
True: (
To_: string[255]
);
end;
Anatoly Podgoretsky (2009-11-12 13:24:00) [1]
> Можно ли не указывать фактический размер для переменной
> string
Можно и это легко проверить.
Сергей М. (2009-11-12 12:47:00) [2]
> как лучше организовать передачу
На стороне передатчика:
1. Передать размер данных
2. Передать сами данные
На стороне приемника:
1. Принять размер данных
2. Принять сами данные размера, полученного в п.1
Григорьев Антон (2009-11-12 12:38:00) [3]А зачем передавать фиксированную структуру на все случаи жизни? Сначала передаёте, например, номер типа пакета, потом все данные, которые относятся к данному типу. А получатель сначала читает тип пакета, а потом по очереди все данные, которые относятся к пакету данного типа.
А в вашем случае получается, например, что в пакете типа 0 всего 21 байт полезный, а ещё 274 - лишний хвост, который имеет смысл только для пакета типа 1. Перерасход трафика в 14 раз. Не жалко?
Кстати, если вы думаете, что запихнув обычный string (без указания размера) в record и передав этот record по сети, вы передадите строку, то сильно заблуждаетесь. http://www.delphikingdom.com/asp/viewitem.asp?catalogid=1206#06
Scot Storch (2009-11-12 11:45:00) [4]Отключать опции в настройках компилятора что-то желания нет. Может дадите совет как лучше организовать передачу запросов между клиентом и сервером. Пока что попытался сделать ввиде одного общего 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 11:35:00) [5]Нельзя, если установлен крыжик Huge Strings в опциях компилятора в св-вах проекта