Página 1 de 1

Usando extensão HRB

Enviado: 26 Abr 2013 08:44
por Itamar M. Lins Jr.
Ola!
Alguém do forum está trabalhando com esta extensão ?
Tem como linkar dois PRG´s criando um único HRB ?

Saudações,
Itamar M. Lins Jr.

Usando extensão HRB

Enviado: 29 Abr 2013 17:48
por asimoes
Olá Itamar,

Veja se você pode tirar essa minha duvida.

Estou testando esse código com o hrb e estou tendo erro erro na execução da chamada da dbedit

Código: Selecionar todos

   cProg:=""
   cProg+="Function Prog()"+Chr(13)+Chr(10)
   //cProg+="Alert('estou executando HRB','Atenção')"+Chr(13) +Chr(10) // tive que tirar a ?
   cProg+="USE APC01 ALIAS APC01"+Chr(13) +Chr(10)
   cProg+="dbedit()"+Chr(13) +Chr(10)
   cProg+="? alias()"+Chr(13) +Chr(10)
   cProg+="? APC01->Codigo,APC01->Nome"+Chr(13) +Chr(10)
   cProg+="u_Return := 'teste'"+Chr(13)+Chr(10)
   cProg+="Return"+Chr(13)+Chr(10)
   MemoWrit("prog.prg",cProg)

   Run("\hbmsvc32\bin\Harbour.exe prog.prg /q0 /n /gh /i:k:\hbmsvc32\include") 

   HB_HRBRun("prog.hrb")
   
   ? "script retornou: "+u_Return
   
   inkey(0)
   
Imagem

Usando extensão HRB

Enviado: 29 Abr 2013 18:10
por Itamar M. Lins Jr.
Ola!
Acredito que a Dbedit não está sendo linkada ao código. Teste com a classe tBrowse.
Eu estou com um problema parecido, só que com o LetoDB.
Irei fazer uns testes aqui para ver se entendo o que está acontecendo.

Saudações,
Itamar M. Lins Jr.

Usando extensão HRB

Enviado: 29 Abr 2013 18:28
por Itamar M. Lins Jr.
Como está fazendo para executar o esse código ?
Eu não estou entendendo como usar esse recurso do harbour. Como script CGI eu entendi, mas tem outras possibilidades.

Saudações,
Itamar M. Lins Jr.

Usando extensão HRB

Enviado: 29 Abr 2013 21:27
por asimoes
Itamar,

Meu código de teste completo é este: consegui no forum do fivewin. o dbedit() fui eu quem adicionou tentei também com tbrowse e deu o mesmo erro.
Estou fazendo pelo método de tentativa e erro é quase nulo as informações deste recurso que achei muito interessante de usar.

Dá uma olha neste include hbhrb.ch que está na pasta include do harbour talvez dê alguma dica.

Código: Selecionar todos

#include "inkey.ch"
#include "setcurs.ch"
#include "error.ch"
#include "achoice.ch"
#include "fileio.ch"
#include "common.ch"
#include "dbinfo.ch"
#include "hbver.ch"
#include "hbdyn.ch"
#include "wvtwin.ch"
#include "hbgtinfo.ch"
#include "hbgtwvg.ch"
#include "wvgparts.ch"
#include "hbcompat.ch"
#include "windows.ch"
#include "hbhrb.ch"

FUNCTION MAIN

LOCAL aCourier, i

PRIVATE u_Return

   fErase("prog.prg")

   cProg:=""
   cProg+="Function Prog()"+Chr(13)+Chr(10)
   //cProg+="Alert('estou executando HRB','Atenção')"+Chr(13) +Chr(10) // tive que tirar a ?
   cProg+="USE APC01 ALIAS APC01"+Chr(13) +Chr(10)
   cProg+="dbedit()"+Chr(13) +Chr(10)
   cProg+="? alias()"+Chr(13) +Chr(10)
   cProg+="? APC01->Codigo,APC01->Nome"+Chr(13) +Chr(10)
   cProg+="u_Return := 'teste'"+Chr(13)+Chr(10)
   cProg+="Return"+Chr(13)+Chr(10)
   MemoWrit("prog.prg",cProg)

   Run("\hbmsvc32\bin\Harbour.exe prog.prg /q0 /n /gh /i:d:\hbmsvc32\include") // coloquei o caminnho do meu harbour.exe e nao xharbour.exe*/

   HB_HRBRun(HB_HRB_BIND_OVERLOAD,"prog.hrb")
   
   ? "script retornou: "+u_Return
   
   inkey(0)

   QUIT

RETURN NIL


INIT FUNCTION AppSetup()
  
  REQUEST HB_LANG_PT
  REQUEST HB_CODEPAGE_PT850
  HB_LANGSELECT("PT")
  HB_CDPSELECT( "PT850" )

  REQUEST DBFCDX
  REQUEST HB_MEMIO
  RddSetDefault("DBFCDX")

  SETMODE(25,80)
  SET TYPEAHEAD TO 0
  SET INTENSITY ON
  SET SCOREBOARD OFF
  SET DELETED ON
  SET SAFETY OFF
  SET ESCAPE ON
  SET CENTURY ON
  SET DELIMITERS TO
  SET EXCLUSIVE OFF
  SET WRAP ON
  SET EPOCH TO 1920
  SET OPTIMIZE ON
  SET AUTOPEN ON
  SET DBFLOCKSCHEME TO DB_DBFLOCK_DEFAULT 
  SET MESSAGE TO 24 CENTER
  
  CLS
  
  IniciaJanela() 

RETURN Nil 


FUNCTION IniciaJanela(nLi,nCi,nLf,nCf)

  cTituloJanela:="TESTE"

  HB_gtInfo(HB_GTI_FONTNAME, "Lucida Console")
  HB_gtInfo(HB_GTI_ICONRES, "ICON_ASAPREV" ) //CLIENTE.RC
  HB_gtInfo(HB_GTI_WINTITLE, cTituloJanela)
  HB_gtInfo(HB_GTI_CLOSABLE, .F. )
  HB_gtInfo(HB_GTI_CLIPBOARDDATA )
  HB_gtInfo(HB_GTI_SELECTCOPY, .T. )
  HB_gtInfo(HB_GTI_MOUSESTATUS, 1 )
  HB_gtInfo(HB_GTI_ISGRAPHIC, .T. )
  HB_gtInfo(HB_GTI_STDERRCON, .T. )
  HB_gtInfo(HB_GTI_COMPATBUFFER, .T. ) 
  HB_gtInfo(HB_GTI_SPEC, HB_GTS_WNDSTATE, HB_GTS_WS_MAXIMIZED )
  hwg_doevents()

RETURN Nil

FUNCTION HB_GTSYS()
   REQUEST HB_GT_WVG_DEFAULT
   REQUEST HB_GT_WVT
   REQUEST HB_GT_WGU
   REQUEST HB_GT_WVG
RETURN Nil 

Usando extensão HRB

Enviado: 30 Abr 2013 08:03
por asimoes
Itamar

consegui.

Tem que usar: REQUEST DBEDIT (fora do script)

Usando extensão HRB

Enviado: 30 Abr 2013 11:12
por asimoes
Continuando os testes consegui fazer isto:
Pode usar EVAL ou EXEC
HANDLE_FUN1:EVAL()
HANDLE_FUN1:EXEC()
ou
EVAL(HANDLE_FUN1)
ou
EVAL(HB_HRBGETFUNSYM( HANDLE_HRB, "PROG1" ))
EVAL(HB_HRBGETFUNSYM( HANDLE_HRB, "PROG2" ))

Código: Selecionar todos

cScript:=MemoRead( "hbscript.prg" )

cHarbourCode := hb_compileFromBuf( cScript, "d:\hbmsvc32\bin\harbour", "/q0", "/n", "/gh","/i:d:\hbmsvc32\include")

MemoWrit( "hbscript.hrb", cHarbourCode )

cConteudo:=MemoRead( "hbscript.hrb" )

HANDLE_HRB := hb_hrbload( cConteudo )
   
HANDLE_FUN1 := HB_HRBGETFUNSYM( HANDLE_HRB, "PROG1" )
HANDLE_FUN2 := HB_HRBGETFUNSYM( HANDLE_HRB, "PROG2" )
   
HANDLE_FUN1:EVAL()
HANDLE_FUN2:EVAL()

? "script 1 retornou: "+u_Return1
? "script 2 retornou: "+u_Return2
inkey(0)
quit
HSCRIPT.PRG

Código: Selecionar todos

FUNCTION PROG1
LOCAL cTeste
   CLS
   cTeste:='ESTOU EXECUTANDO UM SCRIPT 1'
   hwg_MsgInfo(cTeste,'Atenção')
   hwg_MsgInfo('estou executando HRB','Atenção')
   USE APC01 ALIAS APC01
   dbedit()
   CLS
   ? alias()
   ? APC01->Codigo,APC01->Nome
   u_Return1 := 'SCRIPT 1'
RETURN Nil

FUNCTION PROG2
LOCAL cTeste
   CLS
   cTeste:='ESTOU EXECUTANDO UM SCRIPT 2'
   hwg_MsgInfo(cTeste,'Atenção')
   hwg_MsgInfo('estou executando HRB','Atenção')
   USE APC01 ALIAS APC01
   dbedit()
   CLS
   ? alias()
   ? APC01->Codigo,APC01->Nome
   u_Return2 := 'SCRIPT 2'
RETURN Nil

Usando extensão HRB

Enviado: 30 Abr 2013 14:06
por asimoes
Itamar M. Lins Jr. escreveu:Alguém do forum está trabalhando com esta extensão ?
Tem como linkar dois PRG´s criando um único HRB ?
Itamar,
Para linkar 2 ou mais fontes tem criar um arquivo com a extensão .clp

exemplo lista.clp, dentro deste arquivo você informa os fontes com a extensão, no meu caso está assim:

lista.clp
hscript.prg
hscript2.prg

Para gerar o hrb eu estou fazendo assim:

MyRun("\hbmsvc32\bin\harbour.exe @lista -q0 -n -gh /i:\hbmsvc32\include")

Vai ser gerado o arquivo lista.hrb

Código: Selecionar todos

FUNCTION MYRUN( cComando,lEspera )
LOCAL oShell, lOk:=.T.
DEFAULT lEspera TO .T.
   TRY
      oShell:=CreateObject( "WScript.Shell" )
      TRY
         oShell:Run( "%comspec% /c " + cComando, 0, lEspera )
      CATCH
         lOk:=.F.
      END
      oShell:=Nil
   CATCH
      lOk:=.F.
   END
RETURN lOk