Форум: "Основная";
Текущий архив: 2004.01.23;
Скачать: [xml.tar.bz2];
ВнизПроблема с GetPropValue Найти похожие ветки
← →
Starkom (2004-01-12 13:21) [0]В проекте юзаем такую конструкцию:
MyVar:=TMyVar(Pointer(StrToInt(GetPropValue(lala,"Var"))));
Все работает корректно на машинах разработчиков. А вот на машинах юзеров (голая винда и наша система), иногда выскакивает ошибка конвертации строки в инт. Причем иногда очень часто. Непонятно, из-за чего это происходит. Может, кто сталкивался с такой проблемой?
← →
Sandman25 (2004-01-12 13:29) [1]Может, получается StrToInt("")?
← →
Starkom (2004-01-12 13:32) [2]2 SandMan: Понятно, что так и получается! Весь вопрос - почему?
Потому что lala и его поле Var точно инициализированы. И почему это зависит от машины. Может bpl"ки какие-нить надо к системе добавлять?
← →
Sandman25 (2004-01-12 13:35) [3][2] Starkom © (12.01.04 13:32)
Приведите точный код.
← →
Starkom (2004-01-12 14:04) [4]Тебе прислать 10 мегов исходников? :) Смысл то и так ясен. Есть объект и вытаскиваем значение его поля с помощью GetPropValue. На наших машинах (разработчиков) все работает корректно. А на юзерских иногда глючит.
← →
MBo (2004-01-12 14:12) [5]Программа компилируется только у вас?
(это насчет {$M+})
← →
ssk (2004-01-12 14:15) [6]>ошибка конвертации строки в инт
может DecimalSeparator в вашей программе где-то немного глюкавит?
← →
Starkom (2004-01-12 14:28) [7]2 MBo: TMyVar наследован от TPersistent. Или M+ должен стоять у класса объекта lala?
← →
MBo (2004-01-12 14:37) [8]>Или M+ должен стоять у класса объекта lala?
Да, должен. Это не наследник TPersistent?
← →
Starkom (2004-01-12 14:43) [9]2 MBo: Так у меня перед каждый вызовом GetPropValue стоит проверка - if isPublishedProp(lala,"Var") then ...
Разве этого недостаточно?
← →
MBo (2004-01-12 14:47) [10]>MyVar:=TMyVar(Pointer(StrToInt(GetPropValue(lala,"Var"))));
можно поподробнее - зачем понадобилась такая экзотика, ведь многократное преобразование/кастинг RTTI-вариант-строка-целое-указатель-объект чревато...
← →
Starkom (2004-01-12 14:58) [11]Есть куча всяких весьма неоднородных классов - видимые компоненты, невидимые компоненты, просто служебные классы. И у них всех может быть св-во "Var". Вот его то и требуется вытаскивать. Как сделать по-другому, если приходит список объектов всевозможных классов, у которых надо вытащить это св-во, даже не зная - есть оно в объекте или нет? Причем, огромный вложенный if по класснейму тоже не подходит, по конструктивным соображениям.
← →
MBo (2004-01-12 15:11) [12]Не очень понятно пока.
Может, причина в том, что свойство пустое, т.е. не присвоено?
← →
Erik (2004-01-12 15:20) [13]Лучше сделать общего предка и у него поставить необходимые свойства. А все остальные классы наследовать от него. Придется конечно забить кучу методов TPersistent и пр.. так, что возможно это не вариант.
Можно еще использовать Val(GetPropValue(lala,"Var"), V, Code);
покрайней мере exception давать небудет.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.01.23;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.007 c