Автор | Сообщение |
|
| |
Пост N: 324
Зарегистрирован: 05.10.06
|
|
Отправлено: 15.11.21 18:09. Заголовок: отловить ошибки в hb_compileFromBuf
Нужно отлавливать ошибки скрипта, как можно перехватить вывод результата компиляции hb_compileFromBuf ?
|
|
|
Ответов - 4
[только новые]
|
|
|
| |
Пост N: 7480
Зарегистрирован: 17.05.05
|
|
Отправлено: 15.11.21 18:19. Заголовок: Гугл в помощь :sm54..
|
|
|
|
| постоянный участник
|
Пост N: 3943
Зарегистрирован: 17.02.12
|
|
Отправлено: 15.11.21 18:33. Заголовок: Посмотрите исходники..
Посмотрите исходники hbedit от А. Кресина, там, есть перехват ошибок компиляции.
|
|
|
|
| moderator
|
Пост N: 1461
Зарегистрирован: 06.07.06
|
|
Отправлено: 15.11.21 19:03. Заголовок: В hbedit я делаю это..
В hbedit я делаю это так: cFileRes := hb_DirTemp() + "hb_compile_err.out" ... ie := cedi_rediron( 2, cFileRes ) cHrb := hb_compileFromBuf( sCode, "harbour", "-n2", "-q", "-w" ) cedi_rediroff( 2, ie ) cBuff := Memoread( cFileRes ) А вот С-функции: HB_FUNC( CEDI_REDIRON ) { int istd = ( HB_ISNIL( 1 ) ) ? 1 : hb_parni( 1 ); int fd; fflush( ( istd == 1 ) ? stdout : stderr ); fd = dup( fileno( ( istd == 1 ) ? stdout : stderr ) ); freopen( hb_parc( 2 ), "w", ( istd == 1 ) ? stdout : stderr ); hb_retni( fd ); } HB_FUNC( CEDI_REDIROFF ) { int istd = ( HB_ISNIL( 1 ) ) ? 1 : hb_parni( 1 ); int fd; fflush( ( istd == 1 ) ? stdout : stderr ); if( HB_ISNIL( 2 ) ) { fclose( ( istd == 1 ) ? stdout : stderr ); } else { fd = hb_parni( 2 ); dup2( fd, fileno( ( istd == 1 ) ? stdout : stderr ) ); close( fd ); clearerr( ( istd == 1 ) ? stdout : stderr ); } }
|
|
|
|
| |
Пост N: 325
Зарегистрирован: 05.10.06
|
|
Отправлено: 16.11.21 10:18. Заголовок: Спасибо ! Dima пише..
Спасибо ! Dima пишет: Оба способа дают результат. Вариант Antonio Linares позволяет получить одну ошибку за раз, поэтому предпочтительней улучшенный вариант описанный alkresin , там сразу все ошибки отлавливаем и позволяет подавлять/перехватывать другой не нужный вывод на экран
|
|
|
|