Jairo,
A lib letodb utiliza este recurso.
Uma utilização prática, seria disponibilizar uma rotina para testes ou homologação fora da aplicação principal, o usuário aprovando, a rotina passa integrar a aplicação.
Como funcionaria, uma thread ficaria verificando se o arquivo hbscript.hrb está presente, se está, abre e executa.
Um exemplo:
Código: Selecionar todos
MyRun("\hb32fork\bin\harbour.exe @hbscript -q0 -n -gh -i:\hb32fork\include")
cConteudo:=MemoRead( "hbscript.hrb" )
HANDLE_HRB := hb_hrbload( cConteudo )
EVAL(HB_HRBGETFUNSYM( HANDLE_HRB, "PROG3" ))
Conteúdo de hbscript.clp
HBSCRIPT.PRG
HBSCRIPT2.PRG
HBSCRIPT.PRG
Código: Selecionar todos
FUNCTION PROG1(cMensagem)
LOCAL cTeste
HB_Default(@cMensagem,"")
hwg_MsgInfo(cMensagem)
RETURN Nil
HBSCRIPT2.PRG
Código: Selecionar todos
FUNCTION PROG3
LOCAL cTeste
CLS
PROG1("Chamando PROG1 de PROG3")
//hb_threadStart( { |oThr| PROG1("Chamando PROG1 de PROG3") } )
RETURN Nil
Um exemplo do LetoDb server.prg (função de usuário)
Código: Selecionar todos
STATIC FUNCTION leto_hrbLoad
LOCAL cHrbName := cDirBase + "letoudf.hrb", pInit
IF File( cHrbName )
pHrb := hb_HrbLoad(HB_HRB_BIND_DEFAULT, cHrbName )
IF ! Empty(pHrb)
WrLog( cHrbName + " has been loaded." )
IF ! Empty( pInit := hb_hrbGetFunSym(pHrb, 'UDF_Init') )
hb_ExecFromArray( pInit )
ENDIF
ENDIF
ENDIF
RETURN Nil
Função MyRun
Código: Selecionar todos
FUNCTION MYRUN( cComando )
LOCAL oShell, lOk:=.T.
TRY
oShell:=CreateObject( "WScript.Shell" )
CATCH
TRY
oShell:=CreateObject( "WScript.Shell" )
CATCH
lOk:=.F.
END
END
IF lOk
TRY
oShell:Run( "%comspec% /c " + cComando, 0, .T. )
CATCH
lOk:=.F.
END
oShell:=Nil
ENDIF
RETURN lOk