Текущий архив: 2009.05.10;
Скачать: CL | DM;
Вниз
Использование Ansistring в D2009 в packed record Найти похожие ветки
← →
Индеец (2009-03-01 00:06) [0]Пытаюсь описать такой тип данных:
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-01 00:11) [1]А зачем тебе АнсиСтринг?
← →
Германн © (2009-03-01 00:18) [2]
> Использование Ansistring в D2009
Хм. А разве в D2009 Ansistring какая-то другая?
Или разве в каких-то предыдущих версиях Дельфи Ansistring можно было задать длину на этапе компиляции?
> разумеется такое поле у записи быть не может: param:AnsiString
Это почему "быть не может"?
← →
Индеец (2009-03-01 00:46) [3]
xrpc_params= packed record
case typedata:pm_rpctypes of
xrt_struct:
(params:tstringlist);
xrt_array,xrt_base64:
(param:AnsiString);
end;
E2154 Type "AnsiString" needs finalization - not allowed in variant record
т.е. использовать ansistring нельзя в packed record ?
← →
Существо2 (2009-03-01 00:48) [4]А зачем тебе АнсиСтринг?
← →
Anatoly Podgoretsky © (2009-03-01 00:55) [5]> Индеец (01.03.2009 0:06:00) [0]
Для AnsiString размера быть не может - это динамическая структура и она допустима в записях, точно такая же как и .tstringlist указаный в коде.
String[30] это ShortString статическая структура.
Не может быть не в записи, а в вариантной записи, по указаной причине. Компилятор не в состояние определить, нужна ли финализация или нет.
← →
Индеец (2009-03-01 00:55) [6]Ну в рекомендациях к D2009 было явно написано, что если вам не необходимо использовать unicode, то использовать необходимо ansistring.
← →
Индеец (2009-03-01 00:57) [7]
> Anatoly Podgoretsky © (01.03.09 00:55) [5]
Спасибо большое. Придется, видимо, переделать код под использование именно string
← →
Anatoly Podgoretsky © (2009-03-01 01:01) [8]> Индеец (01.03.2009 0:57:07) [7]
Но ты потеряешь при этом Юникод.
← →
Германн © (2009-03-01 01:01) [9]
> Индеец (01.03.09 00:06)
Ты всё-таки почитай справку по типам String. Может тебе нужен ShortString?
P.S. Не заметил "с налёту", что у тебя вариантная запись. :(
← →
Индеец (2009-03-01 01:02) [10]
> Anatoly Podgoretsky © (01.03.09 01:01) [8]
А как тогда можно выйти из этой ситуации ? только заменой записи классом ?
← →
Индеец (2009-03-01 01:06) [11]Хотя конечно остается вариант с амассивом Ansichar
> Германн © (01.03.09 01:01) [9]
Так вот как раз нужна поддержка Unicode.
> Существо2 (01.03.09 00:48) [4]
в [6] опечатался : "если вам необходимо использовать unicode, то использовать необходимо ansistring"
← →
Германн © (2009-03-01 01:12) [12]
> Индеец (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:15) [13]
> Германн © (01.03.09 01:12) [12]
в [11] уже написал, что просто там опечатался:
> если вам необходимо использовать unicode, то использовать
> необходимо ansistring
← →
Германн © (2009-03-01 01:25) [14]
> Индеец (01.03.09 01:15) [13]
>
>
> > Германн © (01.03.09 01:12) [12]
>
> в [11] уже написал, что просто там опечатался:
>
> > если вам необходимо использовать unicode, то использовать
> > необходимо ansistring
>
Хм.
← →
Anatoly Podgoretsky © (2009-03-01 11:38) [15]Стало еще хуже.
Может добавить к этой парочке еще и ShortString, а когда дойдем до маразма, то и PChar
← →
Anatoly Podgoretsky © (2009-03-01 11:40) [16]
> Индеец (01.03.09 01:02) [10]
Не делать вариантных записей, давно не рекомендуется и даже не везде идет, вроде в .NET запретили наконец.
← →
Квэнди © (2009-03-03 09:44) [17]
> 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-03 10:14) [18]> Квэнди (03.03.2009 9:44:17) [17]
Необходимо? Не может быть такой необходимости, могут быть неверные решения.
Но приведеная структура будет работать, там нет финализации, только будет потеря Юникода.
← →
Квэнди © (2009-03-03 10:42) [19]да, я понимаю, что будет работать, вопрос нев работоспособности а именно в правильном выборе решения
← →
новичек (2009-03-29 09:13) [20]в делфи 2009 String по умолчанию юникод, а вот
String[30]
объявит строку именно анси а не юникод, вам это нужно было?
← →
Anatoly Podgoretsky © (2009-03-29 09:27) [21]> новичек (29.03.2009 9:13:20) [20]
Вообще не Ansi
← →
мимо (2009-03-29 13:41) [22]
> 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 14:47) [23]Удалено модератором
← →
Правильный$Вася (2009-03-30 13:44) [24]
> если вам необходимо использовать unicode, то использовать
> необходимо ansistring
если вам нужно яблоко, вам нужна груша
Страницы: 1 вся ветка
Текущий архив: 2009.05.10;
Скачать: CL | DM;
Память: 0.52 MB
Время: 0.008 c