Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Использование Ansistring в D2009 в packed record


Страницы:   1 2

Индеец ©   (2009-03-01 00:06:00) 

Пытаюсь описать такой тип данных:
xrpc_params= packed record
 case typedata:pm_rpctypes of
   xrt_struct:
     (params:tstringlist);
   xrt_array,xrt_base64:
     (param:AnsiString);
end;

разумеется такое поле у записи быть не может: param:AnsiString
но написать так: param:AnsiString[30] тоже нельзя, [30] подчеркивается и получаю ошибку
Type 'AnsiString' needs finalization - not allowed in variant record
При написании param:String[30] все впорядке. Но отход от ansistring принес бы порядочно гемороя в дальнейшем коде модуля. Неужели в типе ansistring Нельзя указать размер ? или как это можно сделать ?


Правильный$Вася   (2009-03-30 13:44:00) [1]


> если вам необходимо использовать unicode, то использовать
> необходимо ansistring

если вам нужно яблоко, вам нужна груша


Anatoly Podgoretsky   (2009-03-29 14:47:00) [2]

Удалено модератором


мимо   (2009-03-29 13:41:00) [3]


> Anatoly Podgoretsky ©   (01.03.09 11:40) [16]
> Не делать вариантных записей, давно не рекомендуется и даже
> не везде идет, вроде в .NET запретили наконец.


Что за бред? Кто запретил и кем не рекомендуется? Вы на сам тип Variant в Delphi посмотрите, прежде чем такое заявлять.


> Но ты потеряешь при этом Юникод.


Ага. Великая потеря. Вообще-то в XML чаще UTF-8 используется, который есть 1 байтный. Нафига тут WideChar (UNICODE)?


> Индеец


Используй array of AnsiChar с заданной длинной и не будет проблем. Вообще, использование динамических типов в записях не есть гуд.


Anatoly Podgoretsky   (2009-03-29 09:27:00) [4]

> новичек  (29.03.2009 9:13:20)  [20]

Вообще не Ansi


новичек   (2009-03-29 09:13:00) [5]

в делфи 2009 String по умолчанию юникод, а вот
String[30]
объявит строку именно анси а не юникод, вам это нужно было?


Квэнди   (2009-03-03 10:42:00) [6]

да, я понимаю, что будет работать, вопрос нев работоспособности а именно в правильном выборе решения


Anatoly Podgoretsky   (2009-03-03 10:14:00) [7]

> Квэнди  (03.03.2009 9:44:17)  [17]

Необходимо? Не может быть такой необходимости, могут быть неверные решения.
Но приведеная структура будет работать, там нет финализации, только будет потеря Юникода.


Квэнди   (2009-03-03 09:44:00) [8]


> Anatoly Podgoretsky ©   (01.03.09 11:40) [16]

Понимаю, согласен, но если необходимо описать подобную структуру:
xrpc_params= record
 case typedata:pm_rpctypes of
   xrt_struct,xrt_array:
     (params:tstringlist);
   xrt_base64,xrt_string,xrt_nil:
     (paramstr:string[255]);
   xrt_boolean:
     (paramb:Boolean);
   xrt_datetime,xrt_integer:
     (parami:Integer);
   xrt_double:
     (paramr:Double);
end;

Которая описывает параметры XML-RPC запроса, то как- то в этом случае с вариантной записью решение смотрится лучше, как мне кажется чем

xrpc_params= record
  typedata:pm_rpctypes;
  params:tstringlist;
end;
Хотя бы по ресурсоемкости


Anatoly Podgoretsky   (2009-03-01 11:40:00) [9]


> Индеец   (01.03.09 01:02) [10]

Не делать вариантных записей, давно не рекомендуется и даже не везде идет, вроде в .NET запретили наконец.


Anatoly Podgoretsky   (2009-03-01 11:38:00) [10]

Стало еще хуже.
Может добавить к этой парочке еще и ShortString, а когда дойдем до маразма, то и PChar


Германн   (2009-03-01 01:25:00) [11]


> Индеец   (01.03.09 01:15) [13]
>
>
> > Германн ©   (01.03.09 01:12) [12]
>
> в [11] уже написал, что просто там опечатался:
>
> > если вам необходимо использовать unicode, то использовать
> > необходимо ansistring
>

Хм.


Индеец   (2009-03-01 01:15:00) [12]


> Германн ©   (01.03.09 01:12) [12]

в [11] уже написал, что просто там опечатался:

> если вам необходимо использовать unicode, то использовать
> необходимо ansistring


Германн   (2009-03-01 01:12:00) [13]


> Индеец   (01.03.09 01:06) [11]


> > Германн ©   (01.03.09 01:01) [9]
>
> Так вот как раз нужна поддержка Unicode.
>


> Индеец   (01.03.09 00:55) [6]
>
> Ну в рекомендациях к D2009 было явно написано, что если
> вам не необходимо использовать unicode, то использовать
> необходимо ansistring.
>

Чё-то не стыкуются эти два высказывания.


Индеец   (2009-03-01 01:06:00) [14]

Хотя конечно остается вариант с амассивом Ansichar

> Германн ©   (01.03.09 01:01) [9]

Так вот как раз нужна поддержка Unicode.

> Существо2   (01.03.09 00:48) [4]

в [6] опечатался : "если вам необходимо использовать unicode, то использовать необходимо ansistring"


Индеец   (2009-03-01 01:02:00) [15]


> Anatoly Podgoretsky ©   (01.03.09 01:01) [8]

А как тогда можно выйти из этой ситуации ? только заменой записи классом ?


Германн   (2009-03-01 01:01:00) [16]


> Индеец   (01.03.09 00:06)  

Ты всё-таки почитай справку по типам String. Может тебе нужен ShortString?

P.S. Не заметил "с налёту", что у тебя вариантная запись. :(


Anatoly Podgoretsky   (2009-03-01 01:01:00) [17]

> Индеец  (01.03.2009 0:57:07)  [7]

Но ты потеряешь при этом Юникод.


Индеец   (2009-03-01 00:57:00) [18]


> Anatoly Podgoretsky ©   (01.03.09 00:55) [5]

Спасибо большое. Придется, видимо, переделать код под использование именно string


Индеец   (2009-03-01 00:55:00) [19]

Ну в рекомендациях к D2009 было явно написано, что если вам не необходимо использовать unicode, то использовать необходимо ansistring.


Anatoly Podgoretsky   (2009-03-01 00:55:00) [20]

> Индеец  (01.03.2009 0:06:00)  [0]

Для AnsiString размера быть не может - это динамическая структура и она допустима в записях, точно такая же как и .tstringlist указаный в коде.
String[30] это ShortString статическая структура.

Не может быть не в записи, а в вариантной записи, по указаной причине. Компилятор не в состояние определить, нужна ли финализация или нет.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо