Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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
2-1238409167
korefey
2009-03-30 14:32
2009.05.10
ActiveX проверка запущеного приложения word


2-1238330459
Саша
2009-03-29 16:40
2009.05.10
Системное время


15-1236237557
{RASkov}
2009-03-05 10:19
2009.05.10
Когда драйвер "не нужен", а ОСь его требует


3-1220598203
cstor
2008-09-05 11:03
2009.05.10
Как записать текст, в текстовое поле таблицы Paradox 7


9-1179342614
Mr.Vlad
2007-05-16 23:10
2009.05.10
Проблемы с TGA