FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Crear function para Script de Harbour
Posts: 1276
Joined: Tue Dec 28, 2010 01:29 PM
Crear function para Script de Harbour
Posted: Sun Aug 12, 2018 12:54 AM
Hola foro

Necesito crear una funcion que me ejecute un .prg externo de mi .exe mediante script. Lo he estado haciendo asi:

Code (fw): Select all Collapse
EJECUTAR("EJEMPLO")
, donde ejecutar es la funcion y ejemplo es un .prg (ejemplo.prg)

Mi funcion para llamar al script la estoy haciendo asi:

Code (fw): Select all Collapse
FUNCTION Ejecutar( cCode )
   local oHrb, cResult, bOldError

   FReOpen_Stderr( "comp.log", "w" )
   oHrb = HB_CompileFromBuf( cCode, "-n", "-Ic:\fwh\include", "-Ic:\harbour\include" )

   if ! Empty( oHrb )
      BEGIN SEQUENCE
      bOldError = ErrorBlock( { | o | DoBreak( o ) } )
      hb_HrbRun( oHrb )
      END SEQUENCE
      ErrorBlock( bOldError )
   endif
  */
return nil

//----------------------------------------------------------------------------//
FUNCTION DoBreak( oError )

   local cInfo := oError:operation, n

   if ValType( oError:Args ) == "A"
      cInfo += "   Args:" + CRLF
      for n = 1 to Len( oError:Args )
         MsgInfo( oError:Args[ n ] )
         cInfo += "[" + Str( n, 4 ) + "] = " + ValType( oError:Args[ n ] ) + ;
                   "   " + cValToChar( oError:Args[ n ] ) + CRLF
      next
   endif

   MsgStop( oError:Description + CRLF + cInfo,;
            "Script error at line: " + AllTrim( Str( ProcLine( 2 ) ) ) )

   BREAK

return nil


Con este codigo obtengo el siguiente error



Agradezco quien pueda ayudarme u orientarme

Gracias de antemano

FWH 25.12

Harbour/Hbmk2

Microsoft Visual C++

MySql 8.0

Antigravity

Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Crear function para Script de Harbour
Posted: Sun Aug 12, 2018 05:56 AM

EJECUTAR( MemoRead( "ejemplo.prg" ) )

y elimina esta línea:
// FReOpen_Stderr( "comp.log", "w" )

y modifica esta línea asi:
oHrb = HB_CompileFromBuf( cCode, .T., "-n", "-Ic:\fwh\include", "-Ic:\harbour\include" )

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 1276
Joined: Tue Dec 28, 2010 01:29 PM
Re: Crear function para Script de Harbour
Posted: Sun Aug 12, 2018 12:32 PM
Hola Antonio

Hice los cambios sugeridos y ahora me da este error:

Code (fw): Select all Collapse
Error description: Error COMPILER/20  Incomplete statement or unbalanced delimiters: line:1

Stack Calls
===========
   Called from:  => HB_COMPILEFROMBUF( 0 )
   Called from: .\prg\funciones.prg => EJECUTAR( 407 )


Aca el codigo de la funcion:

Code (fw): Select all Collapse
FUNCTION Ejecutar( cCode )
   local oHrb, cResult, bOldError, oResult

   oHrb = HB_CompileFromBuf( cCode, .T., "-n", "-Ic:\fwh\include", "-Ic:\harbour\include" )

   if ! Empty( oHrb )
      BEGIN SEQUENCE
      bOldError = ErrorBlock( { | o | DoBreak( o ) } )
      hb_HrbRun( oHrb )
      END SEQUENCE
      ErrorBlock( bOldError )
   endif
  */
return nil

//----------------------------------------------------------------------------//
FUNCTION DoBreak( oError )

   local cInfo := oError:operation, n

   if ValType( oError:Args ) == "A"
      cInfo += "   Args:" + CRLF
      for n = 1 to Len( oError:Args )
         MsgInfo( oError:Args[ n ] )
         cInfo += "[" + Str( n, 4 ) + "] = " + ValType( oError:Args[ n ] ) + ;
                   "   " + cValToChar( oError:Args[ n ] ) + CRLF
      next
   endif

   MsgStop( oError:Description + CRLF + cInfo,;
            "Script error at line: " + AllTrim( Str( ProcLine( 2 ) ) ) )

   BREAK

return nil

FWH 25.12

Harbour/Hbmk2

Microsoft Visual C++

MySql 8.0

Antigravity

Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Crear function para Script de Harbour
Posted: Sun Aug 12, 2018 12:35 PM

Cual es el código de ejemplo.prg ?

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 1276
Joined: Tue Dec 28, 2010 01:29 PM
Re: Crear function para Script de Harbour
Posted: Sun Aug 12, 2018 12:44 PM
Code (fw): Select all Collapse
#Include "Fivewin.ch"

// nLen= Tamaño de la Barra
FUNCTION EJEMPLO()
  LOCAL nLen:=20
RETURN nLen

FWH 25.12

Harbour/Hbmk2

Microsoft Visual C++

MySql 8.0

Antigravity

Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Crear function para Script de Harbour
Posted: Sun Aug 12, 2018 12:53 PM

Prueba a quitar el include:

// #Include "Fivewin.ch"

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 1276
Joined: Tue Dec 28, 2010 01:29 PM
Re: Crear function para Script de Harbour
Posted: Sun Aug 12, 2018 12:56 PM
Antonio Linares wrote:Prueba a quitar el include:

// #Include "Fivewin.ch"


Con esto vuelve a mostrar el error "Se detecto corrpcion HB_HRBRUN"

FWH 25.12

Harbour/Hbmk2

Microsoft Visual C++

MySql 8.0

Antigravity

Posts: 1276
Joined: Tue Dec 28, 2010 01:29 PM
Re: Crear function para Script de Harbour
Posted: Mon Aug 13, 2018 04:25 PM

Alguna solucion?

FWH 25.12

Harbour/Hbmk2

Microsoft Visual C++

MySql 8.0

Antigravity

Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Crear function para Script de Harbour
Posted: Mon Aug 13, 2018 06:17 PM

Que version de Harbour estas usando ?

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 1276
Joined: Tue Dec 28, 2010 01:29 PM
Re: Crear function para Script de Harbour
Posted: Mon Aug 13, 2018 07:24 PM
Antonio Linares wrote:Que version de Harbour estas usando ?


Harbour 3.2

FWH 25.12

Harbour/Hbmk2

Microsoft Visual C++

MySql 8.0

Antigravity

Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Crear function para Script de Harbour
Posted: Tue Aug 14, 2018 06:14 AM

En que línea reporta el error ?

Copia aqui toda la información que te aparezca

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 1276
Joined: Tue Dec 28, 2010 01:29 PM
Re: Crear function para Script de Harbour
Posted: Tue Aug 14, 2018 01:21 PM
Aca el codigo completo

demo.prg

Code (fw): Select all Collapse
#include "FiveWin.ch"

FUNCTION MAIN()

ejecutar (MemoRead("medida.prg"))

return nil


ejecutar.prg

Code (fw): Select all Collapse
#include "FiveWin.ch"

FUNCTION Ejecutar( cCode )
   local oHrb, cResult, bOldError, oResult

   oHrb = HB_CompileFromBuf( cCode, .T., "-n", "-Ic:\fwh\include", "-Ic:\harbour\include" )

   if ! Empty( oHrb )
      BEGIN SEQUENCE
      bOldError = ErrorBlock( { | o | DoBreak( o ) } )
      hb_HrbRun( oHrb )
      END SEQUENCE
      ErrorBlock( bOldError )
   endif
  */
return nil

//----------------------------------------------------------------------------//
FUNCTION DoBreak( oError )

   local cInfo := oError:operation, n

   if ValType( oError:Args ) == "A"
      cInfo += "   Args:" + CRLF
      for n = 1 to Len( oError:Args )
         MsgInfo( oError:Args[ n ] )
         cInfo += "[" + Str( n, 4 ) + "] = " + ValType( oError:Args[ n ] ) + ;
                   "   " + cValToChar( oError:Args[ n ] ) + CRLF
      next
   endif

   MsgStop( oError:Description + CRLF + cInfo,;
            "Script error at line: " + AllTrim( Str( ProcLine( 2 ) ) ) )

   BREAK

return nil


medida.prg

Code (fw): Select all Collapse
#Include "Fivewin.ch"

FUNCTION MEDIDA()
  ? "mensaje"
RETURN .T.


Y aqui el error

FWH 25.12

Harbour/Hbmk2

Microsoft Visual C++

MySql 8.0

Antigravity

Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Crear function para Script de Harbour
Posted: Wed Aug 15, 2018 06:53 AM

En vez de:

hb_HrbRun( oHrb )

Hazlo así:

uRet = hb_HrbDo( hb_HrbLoad( oHrb ), ... )

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 817
Joined: Sun Jun 15, 2008 07:47 PM
Re: Crear function para Script de Harbour
Posted: Wed Aug 15, 2018 09:18 AM
No sé si será eso pero mirad en el código:
Code (fw): Select all Collapse
    #include "FiveWin.ch"

    FUNCTION Ejecutar( cCode )
       local oHrb, cResult, bOldError, oResult

       oHrb = HB_CompileFromBuf( cCode, .T., "-n", "-Ic:\fwh\include", "-Ic:\harbour\include" )

       if ! Empty( oHrb )
          BEGIN SEQUENCE
          bOldError = ErrorBlock( { | o | DoBreak( o ) } )
          hb_HrbRun( oHrb )
          END SEQUENCE
          ErrorBlock( bOldError )
       endif
      */ <------------------------------------------------------------------------------------------------------------------ esto sobra aquí ----------------------------------------------------------------------------
    return nil

    //----------------------------------------------------------------------------//
    FUNCTION DoBreak( oError )

       local cInfo := oError:operation, n

       if ValType( oError:Args ) == "A"
          cInfo += "   Args:" + CRLF
          for n = 1 to Len( oError:Args )
             MsgInfo( oError:Args[ n ] )
             cInfo += "[" + Str( n, 4 ) + "] = " + ValType( oError:Args[ n ] ) + ;
                       "   " + cValToChar( oError:Args[ n ] ) + CRLF
          next
       endif

       MsgStop( oError:Description + CRLF + cInfo,;
                "Script error at line: " + AllTrim( Str( ProcLine( 2 ) ) ) )

       BREAK

    return nil
______________________________________________________________________________

Sevilla - Andalucía
Posts: 1276
Joined: Tue Dec 28, 2010 01:29 PM
Re: Crear function para Script de Harbour
Posted: Wed Aug 15, 2018 12:11 PM
Antonio Linares wrote:En vez de:

hb_HrbRun( oHrb )

Hazlo así:

uRet = hb_HrbDo( hb_HrbLoad( oHrb ), ... )


El mismo error de corrupcion

FWH 25.12

Harbour/Hbmk2

Microsoft Visual C++

MySql 8.0

Antigravity