Продолжаем копить глюки SyStemStrngClass
Модератор: Дед Пахом
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
- Губин Игорь
- Шубуршун
- Сообщения: 2583
- Зарегистрирован: 16 Сентябрь 2005, 16:35
- Откуда: Москва
- Благодарил (а): 3 раза
- Поблагодарили: 26 раз
Продолжаем копить глюки SyStemStrngClass
В процессе эксплуатации вылезла очередная фича
В приложении, под windows 7/8, до запуска фрейма и всего подобного, вызывается некая процедура, в которой есть переменная
WorkString SystemStringClass
В принципе, как видно, ничего криминального, но вызов процедуры приводит к ошибке приложения, но не фатальной, с кнопкой Continue
Видимо, это ошибка компилятора, т.к. переход к
WorkString &SystemStringClass
со всеми вытекающими, проблему решает
В приложении, под windows 7/8, до запуска фрейма и всего подобного, вызывается некая процедура, в которой есть переменная
WorkString SystemStringClass
В принципе, как видно, ничего криминального, но вызов процедуры приводит к ошибке приложения, но не фатальной, с кнопкой Continue
Видимо, это ошибка компилятора, т.к. переход к
WorkString &SystemStringClass
со всеми вытекающими, проблему решает
Это я только кажусь дураком! На самом деле я полный идиот!
- Игорь Столяров
- Ветеран движения
- Сообщения: 8028
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 28 раз
- Поблагодарили: 96 раз
Продолжаем копить глюки SyStemStrngClass
В Libsrc переменные для этого класса везде определяются через указатель ...
Наверно все-таки просто начальное объявление было неправильным, а не глюк ...
Код: Выделить всё
SystemStringQueue QUEUE
Str &SystemStringClass
END
SMSMailClient CLASS,TYPE,MODULE('ClaMail.clw'),LINK('ClaMail.clw',_ABCLinkMode_),DLL(_ABCDllMode_)
!region Protected
claTalk &ClaRunExtClass,PROTECTED
errorReporting BOOL,PROTECTED
host &SystemStringClass,PROTECTED
user &SystemStringClass,PROTECTED
pwd &SystemStringClass,PROTECTED
from &SystemStringClass,PROTECTED
ssl BOOL,PROTECTED
port LONG,PROTECTED
...
wantAReceivedNotice BOOL,PRIVATE
encoding &SystemStringClass,PRIVATE
replyTo &SystemStringClass,PRIVATE
Construct PROCEDURE(),PROTECTED
Destruct PROCEDURE(),VIRTUAL
и т.д.
Make Clarion Great Again ! 
- Губин Игорь
- Шубуршун
- Сообщения: 2583
- Зарегистрирован: 16 Сентябрь 2005, 16:35
- Откуда: Москва
- Благодарил (а): 3 раза
- Поблагодарили: 26 раз
Продолжаем копить глюки SyStemStrngClass
А в чём именно некорректность?

Код: Выделить всё
MyClass CLASS,TYPE
MyField LONG
MyProc PROCEDURE
END
OneClass MyClass !Declared object instance, smaller and quicker
TwoClass &MyClass !Object reference, must use New and DISPOSE
Дело в том, что это не первый глюк с SystemStringClass связанный с объявлением в такой форме.
Остальные классы почему-то так себя не ведут.
Это я только кажусь дураком! На самом деле я полный идиот!
- Игорь Столяров
- Ветеран движения
- Сообщения: 8028
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 28 раз
- Поблагодарили: 96 раз
Продолжаем копить глюки SyStemStrngClass
Кто же знает ... Ошибку выдает ведь не объявление класса, а какой-то метод в процессе выполнения ?
Если есть желание разобраться - там и надо смотреть. Или объявлять тип данных, так как сделано в примерах.
Make Clarion Great Again ! 
- Дед Пахом
- Старичок
- Сообщения: 3288
- Зарегистрирован: 07 Июль 2005, 16:51
- Откуда: Москва, Россия
- Благодарил (а): 15 раз
- Поблагодарили: 49 раз
- Контактная информация:
Продолжаем копить глюки SyStemStrngClass
Может это какой-нибудь ASSERT срабатывает? Нет ли номера строки в сообщении об ошибке?
С уважением, ДП
- Губин Игорь
- Шубуршун
- Сообщения: 2583
- Зарегистрирован: 16 Сентябрь 2005, 16:35
- Откуда: Москва
- Благодарил (а): 3 раза
- Поблагодарили: 26 раз
Продолжаем копить глюки SyStemStrngClass
Последний раз редактировалось Губин Игорь 06 Март 2017, 17:23, всего редактировалось 1 раз.
Это я только кажусь дураком! На самом деле я полный идиот!
- Дед Пахом
- Старичок
- Сообщения: 3288
- Зарегистрирован: 07 Июль 2005, 16:51
- Откуда: Москва, Россия
- Благодарил (а): 15 раз
- Поблагодарили: 49 раз
- Контактная информация:
Продолжаем копить глюки SyStemStrngClass
Конечно ни при чём, я писал "ASSERT". Судя по номеру строки, что-то не так проинициализировано для Base64.
С уважением, ДП
- Губин Игорь
- Шубуршун
- Сообщения: 2583
- Зарегистрирован: 16 Сентябрь 2005, 16:35
- Откуда: Москва
- Благодарил (а): 3 раза
- Поблагодарили: 26 раз
Продолжаем копить глюки SyStemStrngClass
Это-то конечно, только вот вопрос в том, ПОЧЕМУ не так проинициализировано?!

Ведь, сугубо формально, замена на & и последующее NEW должно быть абсолютно аналогично!
Переклинило...

Последний раз редактировалось Губин Игорь 06 Март 2017, 17:36, всего редактировалось 1 раз.
Это я только кажусь дураком! На самом деле я полный идиот!
- Губин Игорь
- Шубуршун
- Сообщения: 2583
- Зарегистрирован: 16 Сентябрь 2005, 16:35
- Откуда: Москва
- Благодарил (а): 3 раза
- Поблагодарили: 26 раз
Продолжаем копить глюки SyStemStrngClass
Оно мне надо? Чтобы потом, после очередного патча, наткнуться на новое...

Да и фокус в том, что под 10 отрабатывает на ура, под XP тоже, а проявляется только под 7/8
Глюк локализован, дальше буду писать только &
Это я только кажусь дураком! На самом деле я полный идиот!
- RaFaeL
- ✯ Ветеран ✯
- Сообщения: 1411
- Зарегистрирован: 24 Март 2009, 17:59
- Откуда: НН
- Благодарил (а): 12 раз
- Поблагодарили: 2 раза
- Контактная информация:
Продолжаем копить глюки SyStemStrngClass
А точно не от разрядности системы зависит? А то видел тут фокуc, на x32 работает на x64 глюки и вылеты
- Губин Игорь
- Шубуршун
- Сообщения: 2583
- Зарегистрирован: 16 Сентябрь 2005, 16:35
- Откуда: Москва
- Благодарил (а): 3 раза
- Поблагодарили: 26 раз
Продолжаем копить глюки SyStemStrngClass
Увы, нет. Как мне сказали те, кто отлавливал, тестировали и на 32 и на 64. У меня тестировалось на 10/64, XP/32 и под 10/64 с запуском в режиме совместимости. В режиме совместимости программа запускалась нормально, работала корректно, но вылетала при закрытии.
Проблемный кусок выполнялся при запуске программы
Это я только кажусь дураком! На самом деле я полный идиот!
- Игорь Столяров
- Ветеран движения
- Сообщения: 8028
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 28 раз
- Поблагодарили: 96 раз
Продолжаем копить глюки SyStemStrngClass
Вот это, к сожалению, ни о чем не говорит ... Похоже на проблемы с освобождением памяти.Губин Игорь писал(а):Проблемный кусок выполнялся при запуске программы
В каком релизе C63 был глюк: при запуске отрывалось окно регистрации юзера (NоMDI есстесно), а потом AppFrame программы.
Так вот если в окне регистрации вызывать справку (CHM) - то все работало прекрасно, но закрытие AppFrame (и всего приложения)
заканчивалось стабильно GPF ... причем именно на десктопных Windows, а на том же Windows 2003 никаких проблем не возникало.
Make Clarion Great Again ! 
- Губин Игорь
- Шубуршун
- Сообщения: 2583
- Зарегистрирован: 16 Сентябрь 2005, 16:35
- Откуда: Москва
- Благодарил (а): 3 раза
- Поблагодарили: 26 раз
Продолжаем копить глюки SyStemStrngClass
Больше на вылет за границы.Но фиг его знает, вашбродь!

Это я только кажусь дураком! На самом деле я полный идиот!
- Дед Пахом
- Старичок
- Сообщения: 3288
- Зарегистрирован: 07 Июль 2005, 16:51
- Откуда: Москва, Россия
- Благодарил (а): 15 раз
- Поблагодарили: 49 раз
- Контактная информация:
Продолжаем копить глюки SyStemStrngClass
Разница во времени вызова конструктора Construct(), в первом случае он вызывается при объявлении переменной, во втором при вызове NEW. Например, такой случай:
Тут конструктор вызывается перед объявлением v1, и результат непредсказуем. Если же объявить myString &MyStringClass, то NEW будет вызван после объявления v1, и всё ok.
Код: Выделить всё
MyStringClass CLASS(SystemStringClass), TYPE
Construct PROCEDURE() !-- overloaded
END
myString MyStringClass
v1 STRING(100)
MyStringClass.Construct PROCEDURE()
CODE
SELF.FromString(v1)
С уважением, ДП