Usando extensão HRB

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7929
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Usando extensão HRB

Mensagem 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.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Usando extensão HRB

Mensagem 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
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7929
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Usando extensão HRB

Mensagem 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.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7929
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Usando extensão HRB

Mensagem 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.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Usando extensão HRB

Mensagem 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 
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Usando extensão HRB

Mensagem por asimoes »

Itamar

consegui.

Tem que usar: REQUEST DBEDIT (fora do script)
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Usando extensão HRB

Mensagem 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
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Usando extensão HRB

Mensagem 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
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Responder