Автор | Сообщение |
|
| |
Пост N: 57
Зарегистрирован: 08.04.06
|
|
Отправлено: 25.01.07 00:20. Заголовок: Непонятная ошибка
Попробовал поюзать xHarbour релиз 0.99.70 Компиляция проходит успешно, линковка проходит успешно, запускаю образовавшийся выполнимый файл и получаю: Unrecoverable error 9003: Too many recursive error handler calls Called from DEFERROR(151) Called from __EVAL(21) Called from DEFERROR(151) Called from __EVAL(21) Called from DEFERROR(151) Called from __EVAL(21) Called from DEFERROR(151) Called from __EVAL(21) Called from DEFERROR(151) Called from __EVAL(21) Called from DEFERROR(151) Called from __EVAL(21) Called from DEFERROR(151) Called from __EVAL(21) Called from DEFERROR(151) Called from __EVAL(21) Called from READCFG(34) К чему относятся номера строк в скобках - к исходному .PRG-файлу или к .C-файлу? И как вообще это всё понимать, если в .PRG-файле на строке 34 банальное присвоение: oldbasa = basa а в .C-файле на строке 34 следующее: HB_FUNC_EXTERN( MONOPOLE ); Monopole() у меня небольшая функция: Function Monopole() if sw_network MYMSG("Выполнение данной операции", "в сетевом режиме невозможно.") endif return !sw_network Что Харбору не нравится, понять не могу...
|
|
|
Ответов - 15
[только новые]
|
|
|
| Администратор
|
Пост N: 477
Зарегистрирован: 23.05.05
|
|
Отправлено: 25.01.07 10:01. Заголовок: Re:
Ошибка связана с переопределением обрабочика ошибок Т.е возникает ошибка, управление передается в ErrorBlock, в нем тоже ошибка, и так далее
|
|
|
|
| |
Пост N: 58
Зарегистрирован: 08.04.06
|
|
Отправлено: 26.01.07 02:34. Заголовок: Re: Pasha
Да это-то в общем понятно, непонятно - какие именно ошибки? Что именно Harbourу не нравится? Что вообще сделать-то, чтобы эти ошибки как-то выявить? И вопрос, оставшийся без ответа - к чему всё-таки относятся числа в скобках - к PRG-файлу или к С-файлу?
|
|
|
|
| постоянный участник
|
Пост N: 97
Зарегистрирован: 09.10.06
|
|
Отправлено: 26.01.07 09:59. Заголовок: Re:
Лукашевский пишет: цитата: | И вопрос, оставшийся без ответа - к чему всё-таки относятся числа в скобках - к PRG-файлу или к С-файлу? |
| К PRG-файлу Лукашевский пишет: цитата: | И как вообще это всё понимать, если в .PRG-файле на строке 34 банальное присвоение: oldbasa = basa |
| банальное присвоение: oldbasa := basa
|
|
|
|
| |
Пост N: 59
Зарегистрирован: 08.04.06
|
|
Отправлено: 28.01.07 10:31. Заголовок: Re: Пётр
Присвоение через "=" у меня по всей программе и играет свою определённую роль - чтобы можно было легко взглядом выделить присвоения в выражении через ":=" в череде "чистых" присвоений через "=". Пётр, так ты думаешь, дело в присвоении? Однако в xHarbour версии 0.99.60 никаких проблем с этим не было! Опять-таки, в предыдущей 33-й строке идёт присвоение: oldsel = SELECT() и никаких ошибок на эту строку не выдаётся! К тому же в вызывающем модуле (READCFG.PRG - не главный модуль программы) присвоений через "=" к этому моменту уже сделано штук 50 как минимум! И ещё - вроде бы считается, что всё, что работает в Clipper, должно по максимуму работать и в xHarbour, или нет?
|
|
|
|
| постоянный участник
|
Пост N: 102
Зарегистрирован: 09.10.06
|
|
Отправлено: 28.01.07 13:33. Заголовок: Re:
Лукашевский пишет: цитата: | Пётр, так ты думаешь, дело в присвоении? |
| Вот такой вот код function Main() Local cStr1 := "aaa" Local cStr2 := "bbb" ? cStr1 := cStr2 ? cStr1 = cStr2 return nil В результате получим bbb .T. А теперь попробуем так function Main() Local cStr1 := 44 Local cStr2 := "bbb" ? cStr1 = cStr2 ? cStr1 := cStr2 return nil Результат : Error BASE/1071 Все правильно, в выражении = уже не присваивание, а сравнение на "равно". А := - встроенное присваивание, или присваивание в линию, появилось в Clipper 5.0 и всегда означает присваивание, поэтому именно := можно считать "банальным". Когда-то, споткнувшись на подобном, я напрочь отказался от использования оператора = в качестве оператора присваивания. Но это дело вкуса. А ошибку надо конечно же искать. Не видя код, я ничего не берусь утверждать. Но ошибка однозначно находится в обработчике ошибок. И, я думаю, причина в том, что не обьявлена переменная basa тогда oldbasa = basa Error BASE/1003 variable does not exist и т.д.
|
|
|
|
| постоянный участник
|
Пост N: 103
Зарегистрирован: 09.10.06
|
|
Отправлено: 28.01.07 17:09. Заголовок: Re:
Да, наверное все так и есть. Не поленился и проверил Тестовая программка function Main() cStr3 = cStr2 return nil вылетает с Error BASE/1003 variable does not exist : cStr2 Лукашевский пишет: цитата: | И ещё - вроде бы считается, что всё, что работает в Clipper, должно по максимуму работать и в xHarbour, или нет? |
| Проверено xHarbour 0.99.61 + BCC 5.5, Clipper 5.3. + Blinker 6.0. Так, что никаких претензий к xHarbour быть не должно. Если же обьявить cStr2 Local cStr2 cStr3 = cStr2 или просто написать cStr2 = 1 cStr3 = cStr2 никакой ошибки не случится ( и в xHarbour, и в Clipper 5.3).
|
|
|
|
| |
Пост N: 60
Зарегистрирован: 08.04.06
|
|
Отправлено: 29.01.07 07:56. Заголовок: Re: Пётр
Переменная basa объявлена в головном модуле как PUBLIC, цепляется в READCFG.PRG через файл mypublic.ch (иначе бы ошибка-предупреждение выдавалась ещё на этапе компиляции), а компиляция и сборка проходят без вопросов, так что всё равно непонятно, что xHarbourу в результате не нравится-то...
|
|
|
|
| |
Пост N: 61
Зарегистрирован: 08.04.06
|
|
Отправлено: 30.01.07 00:39. Заголовок: Re: Пётр
Спасибо Петру за разбор ситуации. Действительно, когда я убрал из линковки свой ERRORSYS стала возникать ошибка 1003 Variable does not exist: basa И я кажется понял, что происходит: выполение программы начинается не с процедуры (и PRG-модуля) MAIN, а с процедуры (и PRG-модуля) READCFG! Почему так происходит? MAIN.OBJ однозначно прилинкован, стоит в списке раньше чем READCFG.OBJ... Непонятно.
|
|
|
|
| постоянный участник
|
Пост N: 105
Зарегистрирован: 09.10.06
|
|
Отправлено: 30.01.07 15:30. Заголовок: Re:
А процедура READCFG не обьявлена как INIT?
|
|
|
|
| |
Пост N: 62
Зарегистрирован: 08.04.06
|
|
Отправлено: 02.02.07 07:18. Заголовок: Re: Пётр
Нет. Как INIT объявлена единственно INIT Procedure RddInit но она находится в отдельном PRG-модуле.
|
|
|
|
| |
Пост N: 63
Зарегистрирован: 08.04.06
|
|
Отправлено: 02.02.07 17:43. Заголовок: Re: Пётр
Я даже попробовал объявить процедуру MAIN как INIT - никакого эффекта! Программа упорно начинает выполняться с процедуры READCFG!
|
|
|
|
|
| |
Пост N: 88
Зарегистрирован: 28.06.05
|
|
Отправлено: 05.02.07 13:43. Заголовок: Re:
а поменяйте содержимое процедур MAIN и READCFG!
|
|
|
|
| постоянный участник
|
Пост N: 106
Зарегистрирован: 09.10.06
|
|
Отправлено: 05.02.07 16:36. Заголовок: Re:
Это все гадания на кофейной гуще :) Петр пишет: цитата: | А ошибку надо конечно же искать. Не видя код, я ничего не берусь утверждать. |
|
|
|
|
|
| |
Пост N: 64
Зарегистрирован: 08.04.06
|
|
Отправлено: 06.02.07 07:50. Заголовок: Re: SergeJa
SergeJa пишет: цитата: | а поменяйте содержимое процедур MAIN и READCFG! |
| Интересная идея! Сделал пока что попроще: поменял местами НАЗВАНИЯ процедур в модулях MAIN и READCFG соответственно. Получил теперь при линковке: Error: Unresolved external '_HB_FUN_READCFG' referenced from D:\XHARBOUR....... Получается что, модуль MAIN в линковку вообще не включается? И действительно, что оказалось: в BAT-файле перед MAIN.OBJ стояло ECHP, а не ECHO... Вот ведь ерунда какая! Но пока найдёшь эту ерунду, несколько недель потеряешь...
|
|
|
|
| постоянный участник
|
Пост N: 243
Зарегистрирован: 12.09.06
|
|
Отправлено: 06.02.07 08:18. Заголовок: Re:
Лукашевский пишет: цитата: | Но пока найдёшь эту ерунду, несколько недель потеряешь... |
| Для избежания этих проблем пользуйтесь HBMAKE, он сам создаст скрипт сборки и для многих случаев решит все проблемы.
|
|
|
|