Jmsilva Posted July 7, 2021 Report Share Posted July 7, 2021 "Um contrato bem elaborado ajuda muito, também faça uso de arquivos .hrbs pra proteger algumas informacoes mais sensíveis. Trabalho a distância é uma realidade e não adianta nadar contra a correnteza, devemos nos adaptar." @vailtom @vailtom aproveitando sua colaboração no link do programador, aproveitando seus conhecimentos, poderia exemplificar o uso arquivo .hrb, gerar com o comando harbour test.prg /n /gh consegui, porém não entendi como fazer a chamada, se preciso gerar um .exe com as funções _hrbload(), _hrbDo() e _hrbUnload(), se for isto, no meu exemplo falta lib correspondente. Quem puder contribuir com exemplos prático serei grato! Quote Link to comment Share on other sites More sharing options...
kapiaba Posted July 7, 2021 Report Share Posted July 7, 2021 http://forums.fivetechsupport.com/viewtopic.php?f=19&t=37502&p=224279&hilit=hrb&sid=810b7f19eba6980f390274d5a60e5949#p224279 http://www.pctoledo.com.br/forum/viewtopic.php?f=4&t=17515 https://github.com/harbour/core/blob/master/utils/hbmk2/doc/hbmk2.pt_BR.md Quote Link to comment Share on other sites More sharing options...
vailtom Posted July 7, 2021 Report Share Posted July 7, 2021 Olá, Creio que o Kapiaba matou a pau o problema mais comum com o primeiro link: voce precisa carregar o .hrb pra memoria e guardar ele numa variavel durante todo o período em que precisar usar o seu conteúdo. Quando a variável morrer, o arquivo .hrb será descarregado da memória e suas funções estarão indisponíveis novamente. Guarde-o numa variavel estática ou publica e poderá chamar sempre suas funções carregadas externamente. Espero ter ajudado. Quote Link to comment Share on other sites More sharing options...
emotta Posted July 8, 2021 Report Share Posted July 8, 2021 Segue um exemplo de uso. Uso HRB a quase 20 anos, desde que ainda era instável o seu funcionamento para strings. Function u_Teste() Local oScript oScript := __hrbLoad( "myprog.hrb" ) __hrbDo( oScript, uPar01, uPar02, uPar03) // caso o HRB receba mais parametros basta criar uPar04, uPar05, ..., uPar99 __hrbUnload( oScript ) Return Quote Link to comment Share on other sites More sharing options...
Jmsilva Posted July 8, 2021 Author Report Share Posted July 8, 2021 4 horas atrás, emotta disse: Segue um exemplo de uso. Uso HRB a quase 20 anos, desde que ainda era instável o seu funcionamento para strings. Function u_Teste() Local oScript oScript := __hrbLoad( "myprog.hrb" ) __hrbDo( oScript, uPar01, uPar02, uPar03) // caso o HRB receba mais parametros basta criar uPar04, uPar05, ..., uPar99 __hrbUnload( oScript ) Return Show meu amigo Eduardo! Meu erro era usar um "_", sendo certo dois "__". "_hrbload()' não era encontrada a function nas libs. Valeu! agora deu certo! Eduardo, como nunca usei, mas achei interessante vou estudar e entender esta técnica, agora vamos ao Bizu (dica). Aproveitando vc usa tipo em todas a telas, por exemplo cadastro de cliente, contas, etc ou em alguma rotina específica como uma conexão, ou uma rotina de manutenção, o que vc me diz? O que me chamo a atenção a frase do Vailton - "... também faça uso de arquivos .hrbs pra proteger algumas informações mais sensíveis" De qq forma estou muito grato com a sua ajuda e dos demais amigos, estarei sempre à disposição no que puder colaborar! Quote Link to comment Share on other sites More sharing options...
emotta Posted July 8, 2021 Report Share Posted July 8, 2021 14 minutos atrás, Jmsilva disse: Show meu amigo Eduardo! Meu erro era usar um "_", sendo certo dois "__". "_hrbload()' não era encontrada a function nas libs. Valeu! agora deu certo! Eduardo, como nunca usei, mas achei interessante vou estudar e entender esta técnica, agora vamos ao Bizu (dica). Aproveitando vc usa tipo em todas a telas, por exemplo cadastro de cliente, contas, etc ou em alguma rotina específica como uma conexão, ou uma rotina de manutenção, o que vc me diz? O que me chamo a atenção a frase do Vailton - "... também faça uso de arquivos .hrbs pra proteger algumas informações mais sensíveis" De qq forma estou muito grato com a sua ajuda e dos demais amigos, estarei sempre à disposição no que puder colaborar! eu uso muito pra fazer o que chamo de "ponto de entrada" (quem conhece microsiga sabe o que estou dizendo) Imagina que um cliente seu deseja que toda vez que se inclui um novo fornecedor ele receba um email. Em vez de você criar um parametro e deixar isso no seu fonte padrão (que vc distribui para todos clientes) eu deixo isso fora do executavel. Na pasta onde você instala o sistema (onde fica o executavel) crie uma subpasta chamada HRB. Dentro dessa pasta você coloca os HRBs daquele cliente. Então no seu codigo fonte padrão, após a inclusão do fornecedor você coloca assim: If ExistHRB("enviar_email_inclusao_fornecedor) ExecHrb("enviar_email_inclusao_fornecedor") EndIf Na funcao ExistHRB vc faz um IF FILE(name_hrb) retornando .T. se o arquivo existir ou .F. se não existir na funcao ExecHrb vc faz o hrbload, hrbdo, hrbunload Faço dessa forma em meus sistemas desktop, você pode criar o seu formato a partir dessa idéia ou das outras que foram dadas. Abraços Quote Link to comment Share on other sites More sharing options...
Jmsilva Posted July 8, 2021 Author Report Share Posted July 8, 2021 Entendi Eduardo! mais uma vez Obrigado ! Quote Link to comment Share on other sites More sharing options...
vailtom Posted July 9, 2021 Report Share Posted July 9, 2021 Em 08/07/2021 at 15:19, Jmsilva disse:O que me chamo a atenção a frase do Vailton - "... também faça uso de arquivos .hrbs pra proteger algumas informações mais sensíveis" Voce pode criar um executável com algumas funções mais sensíveis e que deseja manter restrito sem compartilhar seus sources com a equipe. As demais telas e relatórios você pode compartilhar com seu time e gerando hrbs para fazer o carregamento externo deste conteúdo sem problemas. Deu pra pegar a ideia ae? Quote Link to comment Share on other sites More sharing options...
vailtom Posted July 9, 2021 Report Share Posted July 9, 2021 Em outro cenário eu gero um arquivo .hrb com a informação sensível, criptografo ele e carrego em momentos específicos. Um arquivo hrb gerado em windows tb funciona perfeitamente no Linux ou macOS e eu posso inclusive guarda-lo em uma tabela… Quote Link to comment Share on other sites More sharing options...
giovanyvecchi Posted July 10, 2021 Report Share Posted July 10, 2021 Aproveitando o tópico gostaria de saber se tem como criar apenas um arquivo .hrb com varias funções nele. Quote Link to comment Share on other sites More sharing options...
Jmsilva Posted July 11, 2021 Author Report Share Posted July 11, 2021 Harbour nome.prg /n /gh Quote Link to comment Share on other sites More sharing options...
giovanyvecchi Posted July 11, 2021 Report Share Posted July 11, 2021 JmSilva, obrigado pela explicação. Perguntei errado, queria saber se tem como colocar varios prgs em apenas um arquivo .hrb Quote Link to comment Share on other sites More sharing options...
vailtom Posted July 12, 2021 Report Share Posted July 12, 2021 Em 10/07/2021 at 16:59, giovanyvecchi disse: Aproveitando o tópico gostaria de saber se tem como criar apenas um arquivo .hrb com varias funções nele. Olá Giovany, Deste modo não pois ele não se comporta como um arquivo .LIB, mas você pode criar um arquivo (relativamente) grande com todas as funções que precisa. Tenho um aqui com quase 40mil linhas e roda bem... Quote Link to comment Share on other sites More sharing options...
giovanyvecchi Posted July 13, 2021 Report Share Posted July 13, 2021 Brigado pela resposta Vailton. Tenho muitas classes, e uma classe herda de outras que estão separados nos varios prgs em grupos. Neste caso eu teria que colocar estes grupos de classes. Por enquanto vai definido nos #IF na compilação mesmo. Quote Link to comment Share on other sites More sharing options...
vailtom Posted July 13, 2021 Report Share Posted July 13, 2021 Olá Giovany, Sim, entendo... faz sentido. Mas pense em outro cenário: em um projeto eu tenho um arquivo .ZIP (que eu mudei a extensão pra outra qqer) com vários .HRBs dentro dele e no carregamento eu descompacto o seu conteudo numa pasta temporária, carrego os .HRBs que são pertinentes aquela instalação em específico pra memória e logo depois disto eu apago toda a pasta gerada no processo. Daê pra frente o software segue com sua execução tradicional... tenho um script que compila todos os .PRGs, geram o .ZIP e até faz o upload pra um FTP. São mais 2 centavos à este assunto, espero ter ajudado. Jmsilva 1 Quote Link to comment Share on other sites More sharing options...
giovanyvecchi Posted July 16, 2021 Report Share Posted July 16, 2021 Em 13/07/2021 at 14:52, vailtom disse: Olá Giovany, Sim, entendo... faz sentido. Mas pense em outro cenário: em um projeto eu tenho um arquivo .ZIP (que eu mudei a extensão pra outra qqer) com vários .HRBs dentro dele e no carregamento eu descompacto o seu conteudo numa pasta temporária, carrego os .HRBs que são pertinentes aquela instalação em específico pra memória e logo depois disto eu apago toda a pasta gerada no processo. Daê pra frente o software segue com sua execução tradicional... tenho um script que compila todos os .PRGs, geram o .ZIP e até faz o upload pra um FTP. São mais 2 centavos à este assunto, espero ter ajudado. Obrigado Vailtom pela ideia. Mais adiante vou pensar nestas possibilidades buscando estes HRBs diretamente do meu servidor em uma tabela com campos binarios. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.