Форум » [x]Harbour » отловить ошибки в hb_compileFromBuf » Ответить

отловить ошибки в hb_compileFromBuf

MIKHAIL: Нужно отлавливать ошибки скрипта, как можно перехватить вывод результата компиляции hb_compileFromBuf ?

Ответов - 4

Dima: Гугл в помощь Первый результат у него такой https://groups.google.com/g/harbour-devel/c/WFnOTGO91gk/m/LG3lRCrtcX8J

SergKis: Посмотрите исходники hbedit от А. Кресина, там, есть перехват ошибок компиляции.

alkresin: В 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 ); } }


MIKHAIL: Спасибо ! Dima пишет: Гугл в помощь Первый результат у него такой https://groups.google.com/g/harbour-devel/c/WFnOTGO91gk/m/LG3lRCrtcX8J Оба способа дают результат. Вариант Antonio Linares позволяет получить одну ошибку за раз, поэтому предпочтительней улучшенный вариант описанный alkresin , там сразу все ошибки отлавливаем и позволяет подавлять/перехватывать другой не нужный вывод на экран



полная версия страницы