Clarion 7 - 8 разных сборок а проблема одна
Модератор: Дед Пахом
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Clarion 7 - 8 разных сборок а проблема одна
ROUTINE that can RETURN from procedure cannot be called here а в 5 и 6 все отлично
- Дед Пахом
- Старичок
- Сообщения: 3143
- Зарегистрирован: 07 Июль 2005, 16:51
- Откуда: Москва, Россия
- Благодарил (а): 11 раз
- Поблагодарили: 32 раза
- Контактная информация:
Re: Clarion 7 - 8 разных сборок а проблема одна
Код: Выделить всё
R ROUTINE
RETURN
P1 PROCEDURE
CODE
P2()
DO R
P2 PROCEDURE
CODE
DO R
С уважением, ДП
- Admin
- Администратор
- Сообщения: 3963
- Зарегистрирован: 05 Июль 2005, 15:59
- Откуда: Хабаровск
- Благодарил (а): 29 раз
- Поблагодарили: 22 раза
- Контактная информация:
Re: Clarion 7 - 8 разных сборок а проблема одна
Здесь хрень написал... не по правилам клаши...Дед Пахом писал(а):хрен знает, из P1 или из P2 мы выйдем по RETURN?Код: Выделить всё
R ROUTINE RETURN P1 PROCEDURE CODE P2() DO R P2 PROCEDURE CODE DO R
Должно быть так:
Код: Выделить всё
PROGRAM
MAP
P1 PROCEDURE
P2 PROCEDURE
END
CODE
P1
P1 PROCEDURE
CODE
P2()
DO R
R ROUTINE
MESSAGE('ROUTINE 1')
RETURN
P2 PROCEDURE
CODE
DO R
R ROUTINE
MESSAGE('ROUTINE 2')
RETURN
ROUTINE 2
ROUTINE 1
Все работает аналогично и в C6 и в C8, о чем спич господа?
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
- Дед Пахом
- Старичок
- Сообщения: 3143
- Зарегистрирован: 07 Июль 2005, 16:51
- Откуда: Москва, Россия
- Благодарил (а): 11 раз
- Поблагодарили: 32 раза
- Контактная информация:
Re: Clarion 7 - 8 разных сборок а проблема одна
Я приблизительно Вобщем, при каких-то условиях/комбинациях компилятор не может однозначно определить, куда по return выходить.Admin писал(а): Здесь хрень написал... не по правилам клаши...
С уважением, ДП
- morkovin
- Ветеран
- Сообщения: 910
- Зарегистрирован: 20 Июль 2005, 14:53
- Откуда: Volgograd, Russia
- Благодарил (а): 2 раза
- Поблагодарили: 3 раза
- Контактная информация:
Re: Clarion 7 - 8 разных сборок а проблема одна
Тоже получил эту ошибку
И что-где подправить?ROUTINE that can RETURN from procedure cannot be called here
WBR, morkovin
- Дед Пахом
- Старичок
- Сообщения: 3143
- Зарегистрирован: 07 Июль 2005, 16:51
- Откуда: Москва, Россия
- Благодарил (а): 11 раз
- Поблагодарили: 32 раза
- Контактная информация:
Re: Clarion 7 - 8 разных сборок а проблема одна
Совет давали такой: завести флаг Loc:Return, в рутине заменить RETURN на "Loc:Return=True; EXIT", в процедуре после DO Routine "IF Loc:Return=True THEN RETURN END". Кстати, RETURN может быть в одной из вложенных рутин, не обязательно в той, на которую указывает ошибка.
С уважением, ДП
- morkovin
- Ветеран
- Сообщения: 910
- Зарегистрирован: 20 Июль 2005, 14:53
- Откуда: Volgograd, Russia
- Благодарил (а): 2 раза
- Поблагодарили: 3 раза
- Контактная информация:
Re: Clarion 7 - 8 разных сборок а проблема одна
Спасибо!
во вложенных рутинках по-тупому заменил RETURN на EXIT и все откомпилировалось и заработало.в рутине заменить RETURN на "Loc:Return=True; EXIT",
WBR, morkovin
Re: Clarion 7 - 8 разных сборок а проблема одна
действительно замена return на exit решает данную ситуацию. Спасибо !!!!!!!!!!!!!!!!!!!!!!!!!!!
- Дед Пахом
- Старичок
- Сообщения: 3143
- Зарегистрирован: 07 Июль 2005, 16:51
- Откуда: Москва, Россия
- Благодарил (а): 11 раз
- Поблагодарили: 32 раза
- Контактная информация:
Re: Clarion 7 - 8 разных сборок а проблема одна
Может кто-нибудь, кто столкнулся с этой проблемой, будет столь любезен и опишет ситуацию, при которой она возникает?????
С уважением, ДП
Re: Clarion 7 - 8 разных сборок а проблема одна
Дед Пахом писал(а):Может кто-нибудь, кто столкнулся с этой проблемой, будет столь любезен и опишет ситуацию, при которой она возникает?????
Код: Выделить всё
в моем случае если в ROUTINE встречается следующий код
IF ErrorCode() THEN
Message('Невозможно выполнить запорос|' &|
'Причина (клиент): '&Error()&'|' &|
'Причина (сервер):'&FileError(), 'Ошибка', Icon:Exclamation)
SetCursor()
Return меняем на Exit тогда собирается
END
Re: Clarion 7 - 8 разных сборок а проблема одна
Когда-то давным давно Алексей Соловьев написал вот это в ньюсах, надеюсь поможет:Дед Пахом писал(а):Может кто-нибудь, кто столкнулся с этой проблемой, будет столь любезен и опишет ситуацию, при которой она возникает?????
The CLW compiler in C7 is fixing very dangerous issues with using of RETURN
statements in ROUTINEs which have been introduced by oversights in designing
following enhancements to the Clarion language: local classes and routines
local variables. Both them can allocate data objects which require accurate
destroying, for example instances of classes with destructors. Old
implementation of RETURN from ROUTINE just passed execution control to
RETURN statement of procedure owning a ROUTINE. So, all data objects
allocated in all routines and methods of local classes in the call chain
are remaining not destroyed and this could cause unpredictable results.
In new implementation of ROUTINEs, every ROUTINE returns an implicit result
to its caller which tells how it has been finished: by RETURN or by EXIT
(or by "normal" exit because of reaching a point after last routine
statement). According this value the caller either executing the statement
after DO or distributing RETURN further. This works ok if only ROUTINEs are
in the call chain between routine with RETURN and its owner procedure. But
all is bad if there are methods of local classes in the call chain. The
correct destroying of methods' local data in case of RETURN from ROUTINE
is just impossible because of lack in design of local classes. Look the
following scenario:
Код: Выделить всё
IFace INTERFACE
SomeMethod PROCEDURE()
END
MAP
ExtProc (*IFace)
END
P PROCEDURE()
LocalClass CLASS,IMPLEMENTS(IFace)
.....
END
.....
CODE
...
ExtProc (LocalClass.IFace)
...
RETURN
SomeRoutine ROUTINE
RETURN
LocalClass.IFace.SomeMethod PROCEDURE()
CODE
DO SomeRoutine
RETURN
ExtProc PROCEDURE (*IFace I)
......
CODE
...
I.SomeMethod()
...
RETURN
ExtProc too but this is impossible. There are other bad scenarios involving
methods of local classes, e.g. if they are used as callback functions set
by CALLBACK or REGISTEREVENT. Thereby the compiler in C7 is not allowing
RETURN statements in ROUTINEs if they can be called from PROCEDUREs/ROUTINEs
with higher scope level directly or indirectly. Methods of local classes
have higher scope level than routines of the procedure they (classes) are
declared in.
Re: Clarion 7 - 8 разных сборок а проблема одна
Уважаемые почему при изменении размера окна элементы на форме меняют свое местоположение?
- Игорь Столяров
- Ветеран движения
- Сообщения: 7456
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 17 раз
- Поблагодарили: 51 раз
Re: Clarion 7 - 8 разных сборок а проблема одна
Потому, что нужно добавить в описание окна Extensions шаблон "Allows Control to be resized with Window" и указать в нем поведение control'ов окна при изменении его размеров. Здесь возможны варианты ...
За теми кто отстал - не возвращаться. (С) Кодекс