Clarion 7 - 8 разных сборок а проблема одна

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
beholder
Новичок
Сообщения: 17
Зарегистрирован: 26 Февраль 2008, 14:54

Clarion 7 - 8 разных сборок а проблема одна

Сообщение beholder »

ROUTINE that can RETURN from procedure cannot be called here а в 5 и 6 все отлично
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3143
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 11 раз
Поблагодарили: 32 раза
Контактная информация:

Re: Clarion 7 - 8 разных сборок а проблема одна

Сообщение Дед Пахом »

Компилятор стал жёстче.
С уважением, ДП
beholder
Новичок
Сообщения: 17
Зарегистрирован: 26 Февраль 2008, 14:54

Re: Clarion 7 - 8 разных сборок а проблема одна

Сообщение beholder »

засранец он, а не компилятор
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 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
хрен знает, из P1 или из P2 мы выйдем по RETURN?
С уважением, ДП
Аватара пользователя
Admin
Администратор
Сообщения: 3963
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 29 раз
Поблагодарили: 22 раза
Контактная информация:

Re: Clarion 7 - 8 разных сборок а проблема одна

Сообщение Admin »

Дед Пахом писал(а):

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

R  ROUTINE
  RETURN

P1  PROCEDURE
  CODE
  P2()
  DO R

P2  PROCEDURE
  CODE
  DO R
хрен знает, из P1 или из P2 мы выйдем по RETURN?
Здесь хрень написал... не по правилам клаши... :)
Должно быть так:

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

        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 разных сборок а проблема одна

Сообщение Дед Пахом »

Admin писал(а): Здесь хрень написал... не по правилам клаши... :)
Я приблизительно ;-) Вобщем, при каких-то условиях/комбинациях компилятор не может однозначно определить, куда по return выходить.
С уважением, ДП
Аватара пользователя
morkovin
Ветеран
Сообщения: 910
Зарегистрирован: 20 Июль 2005, 14:53
Откуда: Volgograd, Russia
Благодарил (а): 2 раза
Поблагодарили: 3 раза
Контактная информация:

Re: Clarion 7 - 8 разных сборок а проблема одна

Сообщение morkovin »

Тоже получил эту ошибку
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 разных сборок а проблема одна

Сообщение morkovin »

Спасибо!
в рутине заменить RETURN на "Loc:Return=True; EXIT",
во вложенных рутинках по-тупому заменил RETURN на EXIT и все откомпилировалось и заработало.
WBR, morkovin
beholder
Новичок
Сообщения: 17
Зарегистрирован: 26 Февраль 2008, 14:54

Re: Clarion 7 - 8 разных сборок а проблема одна

Сообщение beholder »

:) действительно замена return на exit решает данную ситуацию. Спасибо !!!!!!!!!!!!!!!!!!!!!!!!!!!
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3143
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 11 раз
Поблагодарили: 32 раза
Контактная информация:

Re: Clarion 7 - 8 разных сборок а проблема одна

Сообщение Дед Пахом »

Может кто-нибудь, кто столкнулся с этой проблемой, будет столь любезен и опишет ситуацию, при которой она возникает?????
С уважением, ДП
beholder
Новичок
Сообщения: 17
Зарегистрирован: 26 Февраль 2008, 14:54

Re: Clarion 7 - 8 разных сборок а проблема одна

Сообщение beholder »

Дед Пахом писал(а):Может кто-нибудь, кто столкнулся с этой проблемой, будет столь любезен и опишет ситуацию, при которой она возникает?????

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

в моем случае если в ROUTINE встречается следующий код 
IF ErrorCode() THEN
                Message('Невозможно выполнить запорос|' &|
                'Причина (клиент): '&Error()&'|' &|
                'Причина (сервер):'&FileError(), 'Ошибка', Icon:Exclamation)
                SetCursor()
                Return меняем на Exit  тогда собирается
            END
ORS
Бывалый
Сообщения: 91
Зарегистрирован: 07 Май 2009, 23:18

Re: Clarion 7 - 8 разных сборок а проблема одна

Сообщение ORS »

Дед Пахом писал(а):Может кто-нибудь, кто столкнулся с этой проблемой, будет столь любезен и опишет ситуацию, при которой она возникает?????
Когда-то давным давно Алексей Соловьев написал вот это в ньюсах, надеюсь поможет:

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
In this example the RETURN statement in SomeRoutine must terminate the
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.
beholder
Новичок
Сообщения: 17
Зарегистрирован: 26 Февраль 2008, 14:54

Re: Clarion 7 - 8 разных сборок а проблема одна

Сообщение beholder »

:x Уважаемые почему при изменении размера окна элементы на форме меняют свое местоположение? :D
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7456
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 17 раз
Поблагодарили: 51 раз

Re: Clarion 7 - 8 разных сборок а проблема одна

Сообщение Игорь Столяров »

Потому, что нужно добавить в описание окна Extensions шаблон "Allows Control to be resized with Window" и указать в нем поведение control'ов окна при изменении его размеров. Здесь возможны варианты ... ;)
За теми кто отстал - не возвращаться. (С) Кодекс
Ответить