наследование от SoprHoz

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

Ответить
Hmyrii
Постоянный гость
Сообщения: 62
Зарегистрирован: 07 июн 2006, 08:23

наследование от SoprHoz

Сообщение Hmyrii »

Всем доброго времени суток.
Есть проект, в рамках которого был сделан свой фейс, унаследованный от SoprHoz.
До недавнего времени все было ровно.
Тут вот накатили в очередной раз патчи, в частности F_SOPRHOZ.RES до версии 8.10.66.0
Само собой пришлось качнуть исходники этого патча, выдрать из него новую реализацию SoprHoz, чтобы пересобрать свой проект.
И вот тут лыжи не поехали. Сам новый SoprHoz собирается без проишествий. А вот на стадии компиляции моего наследника ругается бранными словами:

Код: Выделить всё

Runtime error 216 (rtl: попытка обращения к некорректному дескриптору)
in atlantis.rtl at 00021F50
Версия атлантиса 5.4.27
Вот код компилируемого фейса

Код: Выделить всё

#include SoprHoz.vih
VipInterface SoprHozVK(SoprHoz);
interface SoprHozVK;
end.
vip.bat

Код: Выделить всё

set ApiDataBase=D:\GAL810\-test\DATA
set ApiExePath=D:\Atl810\Atlantis\exe\vip.exe
set ApiOutFile=D:\my_data\Work_NA\1\user3.res
set ApiTempPath=.\Temp

if exist %ApiOutFile% del %ApiOutFile%
if exist AtlantIs.res del AtlantIs.res
if exist macro.txt del macro.txt

%ApiExePath% vip.prj
vip.prj

Код: Выделить всё

#statusline "statgal"

#include galnet.inc end;
#include GLOVARS.INC

#include galaktika.vil

#make "D:\my_data\Work_NA\1\*.vip"
Могу добавить вот еще что. После долгих изысканий удалось выяснить следующее.
В SoprHoz.vip вставлен инклуд #include SoprMArker.var.
В нем есть переменная var Eventer : SoprMarker new;
Так вот стоит только закоментить эту строку, компиляция проходит !

Для пробы оставил ее, но передал с типа SOPRMARKER на тип MARKER, код фейса SoprHoz пришлось перетряхнуть. Компиляция проходит!

Может кто понимает суть вещей глубже чем я? Почему от текущей реализации фейса SoprHoz не выходит унаследоваться. Чем так мешает наличие в нем переменной типа SoprMarker?
sensoft
Постоянный гость
Сообщения: 67
Зарегистрирован: 15 апр 2008, 16:48
Откуда: Череповец

Re: наследование от SoprHoz

Сообщение sensoft »

Если был выход за пределы индекса, то наверно лечится удалением dsk.
LaaLaa

Re: наследование от SoprHoz

Сообщение LaaLaa »

Не совсем понимаю зачем вам нужно выдирать исходники базового интерфейса из базового ресурса. И пересобирать его для того чтобы потом собрать потомка. Для сборки потомка достаточно компилятору подключить (OpenResouces) базовый ресурс F_SoprHoz.res и подключить обновленные (#inclue) .VIH .VIL .INC файлы которые вместе с обновлением идут.

И еще Обновление F_SOPRHOZ 8.10.66.0 собрано на Атлантисе версии 5.4.33. По этому компилятор вам тоже нужно обновить.

Иногда с выходом новых версий компилятора меняется формат ресурсов. По этому более старый компилятор в общем случае не может открыть ресурс созданный более новым компилятором.
Den
Местный житель
Сообщения: 1842
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

Re: наследование от SoprHoz

Сообщение Den »

Hmyrii писал(а): ....
Есть проект, в рамках которого был сделан свой фейс, унаследованный от SoprHoz.
...
Вот код компилируемого фейса

Код: Выделить всё

#include SoprHoz.vih
VipInterface SoprHozVK(SoprHoz);
interface SoprHozVK;
end.
Угу, не совсем понятно, как заметил LaaLaa, зачем Вы пересобираете Soprhoz.vip. Вы же уже снаследовались Вышеприведенным кодом и работаете уже с SoprHozVK
Hmyrii
Постоянный гость
Сообщения: 62
Зарегистрирован: 07 июн 2006, 08:23

Re: наследование от SoprHoz

Сообщение Hmyrii »

Что я имею в общем:
1. Имеем папку SOURCE - там лежит исходники релиза Гали
2. Много чего из стандартного функционала переделано - что то сделано альтером, что то сделано наследованием, а где то пришлось просто переписывать непосредственно исходный фейс.
3. Каждый раз при установке очередных патчей, все доработки отваливаются - приходится качать исходники патчей и встраивать их в исходники релиза - после чего производить пересборку своего проекта, с теми стандартными фейсами которые переписаны приходитя повозится, приходится брать свои "дописки" и переносить их в новую версию файла взятого из патча.

надеюсь теперь ясно зачем я дергаю исходники патчей и почему у меня source\CompSrc\F_SoprHoz содержит не просто исходники релиза, а исходники текущей конфигурации системы, это касается и всех остальных компонент

а теперь если уйти от слов к делу
есть код и он не компилится
если у меня что то не компилится, прежде чем напрягать других людей своей проблеммой я пытаюсь решить ее сам
я усек своего наследник по самое небалуйся

Код: Выделить всё

#include SoprHoz.vih
VipInterface SoprHozVK(SoprHoz);
interface SoprHozVK;
end.
а он все ровно не компилится
Угу, не совсем понятно, как заметил LaaLaa, зачем Вы пересобираете Soprhoz.vip
следущий ход очевиден, надо сунуть нос в родителя и глянуть, может с ним чего случилось, с предыдущими накатами патчей пересборка шла на ура
кода там не две строчки, так что поверхностным взглядом не какого криминала там увидеть не удалось
далее начинается ШАМАНСТВО:
1. родитель добавлен в проект - компилим - на стадии компиляции наследника видим Runtime error
2. усекаем родителя по максимуму - компилим - КОМПИЛИТСЯ
...
57. в итоге удается найти в родителе переменную var Eventer : SoprMarker new; - стоит убить ее из кода, сразу все компилится

вот это и поставило меня в ступор, и сподвигнуло задать вопрос коллегам
ведь если уйти от терминов пачти, компоненты .... и оставить голую абстракцию, есть некий фейс SoprHoz, к нему не удается привязать наследника
почему? я чего то недопонимаю в сути вещей? или может быть просто несовершенство наследования в атлантисе?
ведь это может полезть и из других фейсов, не хотелось бы знаете ли возвращатся к тому что имели 3 года назад, и все делать прямой перепиской стандартных фейсов - ибо тогда каждый накат патчей - это ад для программера который сопровождает сей проект

... и еще, на атлантисе 5.4.33 и 5.4.34 ошибка повторяется, проверенно ...
LaaLaa

Re: наследование от SoprHoz

Сообщение LaaLaa »

Ок, суть вашего технологического процесса понятна.

Очевидно это какой то дефект компилятора.

Наличие строчки var Eventer : SoprMarker new; в контексте других строк кода и окружения компилятора. Послужило катализатором для проявления этого дефекта.

По хорошему дефект нужно поправить где то в самом компиляторе. Было бы хорошо если бы контрольный пример (набор исходников и настроек проекта) как-то передали в техподдержку. Для того чтобы в рабочем прядке этот дефект можно было про исследовать. Файл atlerror.log тоже поможет анализу.
ahv
Новичок
Сообщения: 21
Зарегистрирован: 15 дек 2009, 07:52

Re: наследование от SoprHoz

Сообщение ahv »

а если убрать из prj-файла строку "#include galaktika.vil", то компилируется и работает. почему?
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5187
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Re: наследование от SoprHoz

Сообщение edward_K »

иногда влияет размер файлов, разбитие на include помогает. Сталкивался еще с тем когда вместе 10 файлов докомпиляции не компилится в общий ресурс(runtime), а разбить по проектам каждый в отдельности без пробем. Обычно это начинается при размере реса больше 5 метров. Твк что в то место где вы берете исходники шлите свой проект и свои доработки.
От корячивания стандартных файлов нужно уходить - трясите разработку о делании точек входа и уходите в докомпиляцию или в тоже наследование.
Ответить