Страница 1 из 2
Продолжаем копить глюки SyStemStrngClass
Добавлено: 06 Март 2017, 14:13
Губин Игорь
В процессе эксплуатации вылезла очередная фича
В приложении, под windows 7/8, до запуска фрейма и всего подобного, вызывается некая процедура, в которой есть переменная
WorkString SystemStringClass
В принципе, как видно, ничего криминального, но вызов процедуры приводит к ошибке приложения, но не фатальной, с кнопкой Continue
Видимо, это ошибка компилятора, т.к. переход к
WorkString &SystemStringClass
со всеми вытекающими, проблему решает
Продолжаем копить глюки SyStemStrngClass
Добавлено: 06 Март 2017, 16:31
Игорь Столяров
В 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
и т.д.
Наверно все-таки просто начальное объявление было неправильным, а не глюк ...
Продолжаем копить глюки SyStemStrngClass
Добавлено: 06 Март 2017, 16:38
Губин Игорь
Игорь Столяров писал(а): Наверно все-таки просто начальное объявление было неправильным, а не глюк ...
А в чём именно некорректность?
Код: Выделить всё
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 связанный с объявлением в такой форме.
Остальные классы почему-то так себя не ведут.
Продолжаем копить глюки SyStemStrngClass
Добавлено: 06 Март 2017, 16:43
Игорь Столяров
Губин Игорь писал(а): А в чём именно некорректность?
Кто же знает ... Ошибку выдает ведь не объявление класса, а какой-то метод в процессе выполнения ?
Если есть желание разобраться - там и надо смотреть. Или объявлять тип данных, так как сделано в примерах.
Продолжаем копить глюки SyStemStrngClass
Добавлено: 06 Март 2017, 16:43
Дед Пахом
Может это какой-нибудь ASSERT срабатывает? Нет ли номера строки в сообщении об ошибке?
Продолжаем копить глюки SyStemStrngClass
Добавлено: 06 Март 2017, 17:10
Губин Игорь
Дед Пахом писал(а): Нет ли номера строки в сообщении об ошибке?

Продолжаем копить глюки SyStemStrngClass
Добавлено: 06 Март 2017, 17:13
Дед Пахом
Губин Игорь писал(а): Accept тут не при чём
Конечно ни при чём, я писал "ASSERT". Судя по номеру строки, что-то не так проинициализировано для Base64.
Продолжаем копить глюки SyStemStrngClass
Добавлено: 06 Март 2017, 17:34
Губин Игорь
Дед Пахом писал(а):
Судя по номеру строки, что-то не так проинициализировано для Base64
Это-то конечно, только вот вопрос в том, ПОЧЕМУ не так проинициализировано?!
Ведь, сугубо формально, замена на & и последующее NEW должно быть абсолютно аналогично!
Дед Пахом писал(а):
Конечно ни при чём, я писал "ASSERT".
Переклинило...

Продолжаем копить глюки SyStemStrngClass
Добавлено: 06 Март 2017, 17:34
Дед Пахом
Потрать 5 минут с отладчиком, делов-то.
Продолжаем копить глюки SyStemStrngClass
Добавлено: 06 Март 2017, 17:38
Губин Игорь
Дед Пахом писал(а): Потрать 5 минут с отладчиком, делов-то.
Оно мне надо? Чтобы потом, после очередного патча, наткнуться на новое...
Да и фокус в том, что под 10 отрабатывает на ура, под XP тоже, а проявляется только под 7/8
Глюк локализован, дальше буду писать только &
Продолжаем копить глюки SyStemStrngClass
Добавлено: 06 Март 2017, 17:48
RaFaeL
Губин Игорь писал(а): Да и фокус в том, что под 10 отрабатывает на ура, под XP тоже, а проявляется только под 7/8
А точно не от разрядности системы зависит? А то видел тут фокуc, на x32 работает на x64 глюки и вылеты
Продолжаем копить глюки SyStemStrngClass
Добавлено: 06 Март 2017, 17:54
Губин Игорь
RaFaeL писал(а): А точно не от разрядности системы зависит? А то видел тут фокуc, на x32 работает на x64 глюки и вылеты
Увы, нет. Как мне сказали те, кто отлавливал, тестировали и на 32 и на 64. У меня тестировалось на 10/64, XP/32 и под 10/64 с запуском в режиме совместимости. В режиме совместимости программа
запускалась нормально, работала корректно, но вылетала при закрытии.
Проблемный кусок выполнялся при запуске программы
Продолжаем копить глюки SyStemStrngClass
Добавлено: 06 Март 2017, 22:02
Игорь Столяров
Губин Игорь писал(а):Проблемный кусок выполнялся при запуске программы
Вот это, к сожалению, ни о чем не говорит ... Похоже на проблемы с освобождением памяти.
В каком релизе C63 был глюк: при запуске отрывалось окно регистрации юзера (NоMDI есстесно), а потом AppFrame программы.
Так вот если в окне регистрации вызывать справку (CHM) - то все работало прекрасно, но закрытие AppFrame (и всего приложения)
заканчивалось стабильно GPF ... причем именно на десктопных Windows, а на том же Windows 2003 никаких проблем не возникало.
Продолжаем копить глюки SyStemStrngClass
Добавлено: 07 Март 2017, 10:19
Губин Игорь
Игорь Столяров писал(а): Вот это, к сожалению, ни о чем не говорит ... Похоже на проблемы с освобождением памяти.
Больше на вылет за границы.Но фиг его знает, вашбродь!

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