![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Использование Ansistring в D2009 в packed record
Индеец © (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 статическая структура.
Не может быть не в записи, а в вариантной записи, по указаной причине. Компилятор не в состояние определить, нужна ли финализация или нет.