Exemplo que imprima leitura X no [x]Harbour c/ DLL Daruma

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

Moderador: Moderadores

ricardo-barros
Usuário Nível 3
Usuário Nível 3
Mensagens: 104
Registrado em: 29 Out 2009 20:12
Localização: Fortaleza

Exemplo que imprima leitura X no [x]Harbour c/ DLL Daruma

Mensagem por ricardo-barros »

Olá colegas.

Minha migração só poderá acontecer se eu souber como imprimir cupons fiscais Daruma. Alguém poderia dar um exemplo de um prg que imprima uma leitura X usando a DLL Daruma32?

O exemplo anexo se propõe a isso e foi tirado do próprio site da Daruma mas dá erro de sintaxe ao ser compilado.

Agradeço por qualquer ajuda.
Anexos
cupom4.prg
(1.92 KiB) Baixado 178 vezes
Avatar do usuário
alaminojunior
Colaborador
Colaborador
Mensagens: 1717
Registrado em: 16 Dez 2005 21:26
Localização: Ubatuba - SP

Re: Exemplo que imprima leitura X no [x]Harbour c/ DLL Daruma

Mensagem por alaminojunior »

Os exemplos da Daruma em xHarbour são feitos com Fivewin. Talvez seja este o entrave. Mas para trabalhar com DLL´s no seu caso seria o seguinte:
Para declarar a DLL:
h1:= LoadLibrary("Daruma32.dll")
Para Leitura X
ret:= dllcall(h1,32,"Daruma_FI_LeituraX")
Isso é o básico do básico. Depois precisa interpretar os retornos e coisas do tipo. E talvez precise editar algumas chaves no registro do Windows, mas baixe o Help da Daruma.dll no site da Daruma, que é bem fácil de entender.
Qualquer coisa, prende o grito.
Compilador xHarbour 1.2.3 + Embarcadero C++ 7.30
MySQL c/ SQLRDD
HwGui + GTWVG
ricardo-barros
Usuário Nível 3
Usuário Nível 3
Mensagens: 104
Registrado em: 29 Out 2009 20:12
Localização: Fortaleza

Re: Exemplo que imprima leitura X no [x]Harbour c/ DLL Daruma

Mensagem por ricardo-barros »

Compilou legal mas deu erro ao linkar. Acho que falta alguma lib no Build.bat

Proc Main()

h1:= LoadLibrary("Daruma32.dll")
ret:= dllcall(h1,32,"Daruma_FI_LeituraX")

Return

Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland
Error: Unresolved external '_HB_FUN_LOADLIBRARY' referenced from C:\SCE\DARUMA\X.OBJ
Error: Unresolved external '_HB_FUN_DLLCALL' referenced from C:\SCE\DARUMA\X.OBJ

Eu compilei assim:

Build X
Anexos
Build.txt
Tive que renomear a extensão senão o forum não aceita
(1.78 KiB) Baixado 100 vezes
Avatar do usuário
alaminojunior
Colaborador
Colaborador
Mensagens: 1717
Registrado em: 16 Dez 2005 21:26
Localização: Ubatuba - SP

Re: Exemplo que imprima leitura X no [x]Harbour c/ DLL Daruma

Mensagem por alaminojunior »

Uai !
É xHarbour ? Qual versão ?

Eu compilo e linko usando o Hbmake e a única coisa que precisaria mencionar para gerar esta simples rotina, é o próprio arquivo.prg.
Compilador xHarbour 1.2.3 + Embarcadero C++ 7.30
MySQL c/ SQLRDD
HwGui + GTWVG
ricardo-barros
Usuário Nível 3
Usuário Nível 3
Mensagens: 104
Registrado em: 29 Out 2009 20:12
Localização: Fortaleza

Re: Exemplo que imprima leitura X no [x]Harbour c/ DLL Daruma

Mensagem por ricardo-barros »

Olá alaminojunior
Obrigado pelo interesse em me ajudar. Vejo que a solução está próxima.

Eu pretendo usar o Fivewin logo que aprender o suficiente. Por enquanto uso o Harbour 1.0 e já consegui migrar meu sistema quase todo, só faltam as rotinas de cupom fiscal. Meu interesse em 32 bits é justamente acessar a DLL Daruma sem o uso de programas externos (como o Observer 2) que deixam a impressão lenta.

Tentei compilar sua dica com Hbmake e ele gerou o exe sem o erro citado. Mas ao executá-lo ele dá um erro de Procedure Main não encontrada:

Unrecoverable error 9012: Can´t locate the start procedure: ´Main´

Mas você pode ver que ela está lá.

A propósito, o meu hbmake não compila nem o conhecido e básico Hello World.
ricardo-barros
Usuário Nível 3
Usuário Nível 3
Mensagens: 104
Registrado em: 29 Out 2009 20:12
Localização: Fortaleza

Re: Exemplo que imprima leitura X no [x]Harbour c/ DLL Daruma

Mensagem por ricardo-barros »

Vejam só que coisa estranha:

Apesar de não conseguir compilar o Hello World com Hbmake, o meu sistema com 250 prgs compila numa boa.
Essa eu não entendi.

Aí eu acrescentei as linhas:

h1:= LoadLibrary("Daruma32.dll")
ret:= dllcall(h1,32,"Daruma_FI_LeituraX")

Agora o Hbmake dá o mesmo erro:

Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland
Error: Unresolved external '_HB_FUN_LOADLIBRARY' referenced from C:\SCE\DARUMA\X.OBJ
Error: Unresolved external '_HB_FUN_DLLCALL' referenced from C:\SCE\DARUMA\X.OBJ

Isto aumenta a suspeita de que falta alguma Lib na pasta do Harbour.
Avatar do usuário
alaminojunior
Colaborador
Colaborador
Mensagens: 1717
Registrado em: 16 Dez 2005 21:26
Localização: Ubatuba - SP

Re: Exemplo que imprima leitura X no [x]Harbour c/ DLL Daruma

Mensagem por alaminojunior »

ricardo-barros escreveu:Por enquanto uso o Harbour 1.0
Apesar de as vezes ocorrerem alguns enganos, vou assumir que você está usando exatamente o Harbour e não o xHarbour, que a esta altura do campeonato possuem suas grandes particularidades. Sendo assim, parece que está faltando mencionar a lib xhb.lib que contém entre outras, as funções DLLCALL e LOADLIBRARY.
Compilador xHarbour 1.2.3 + Embarcadero C++ 7.30
MySQL c/ SQLRDD
HwGui + GTWVG
ricardo-barros
Usuário Nível 3
Usuário Nível 3
Mensagens: 104
Registrado em: 29 Out 2009 20:12
Localização: Fortaleza

Re: Exemplo que imprima leitura X no [x]Harbour c/ DLL Daruma

Mensagem por ricardo-barros »

Rapaz,

Tá perto. A lib xhb existe na pasta do Harbour mas do não contava no script de compilação que eu tinha criado com hbmake cliente.bc -ex. Aí eu a inclui no script.

A surpresa é que mesmo assim as funções de acesso à DLL continuam dando erro de Unresolved external.

A xhb é mesmo a lib responsável por estas funções?

Obrigado mais uma vez.
Avatar do usuário
alaminojunior
Colaborador
Colaborador
Mensagens: 1717
Registrado em: 16 Dez 2005 21:26
Localização: Ubatuba - SP

Re: Exemplo que imprima leitura X no [x]Harbour c/ DLL Daruma

Mensagem por alaminojunior »

ricardo-barros escreveu:A xhb é mesmo a lib responsável por estas funções?
Pelo menos é o que consta no Help.
Um detalhe é: se você está usando Harbour, o make deveria ser o Hbmk2 e não o Hbmake.
Vamos ver se algum colega que também use o Harbour, nos dá uma luz.
Compilador xHarbour 1.2.3 + Embarcadero C++ 7.30
MySQL c/ SQLRDD
HwGui + GTWVG
ricardo-barros
Usuário Nível 3
Usuário Nível 3
Mensagens: 104
Registrado em: 29 Out 2009 20:12
Localização: Fortaleza

Re: Exemplo que imprima leitura X no [x]Harbour c/ DLL Daruma

Mensagem por ricardo-barros »

Ora vejam!

Com o Hbmk2 o Hello World finalmente funcionou!

Mas o Hbmake serviu muito bem para compilar o meu sistema. E ele tem muitos prg.

A questão agora é como compilar mais de um prg no mesmo sistema pois o hbmk2 não requer um arquivo de extensão BC. Além disso como incluir a xhb.lib para testar com hbmk2. Ou será que no Harbour a lib é outra?

Só lembrando, as funções que eu quero usar são:

h1:= LoadLibrary("Daruma32.dll")
ret:= dllcall(h1,32,"Daruma_FI_LeituraX")

Obrigado, Alaminojunior. E também a todos que puderem ajudar.
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Re: Exemplo que imprima leitura X no [x]Harbour c/ DLL Daruma

Mensagem por sygecom »

Ricardo,
Essa versão do Harbour está meia desatualizada, procure atualizar para a versão 2.0.
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
ricardo-barros
Usuário Nível 3
Usuário Nível 3
Mensagens: 104
Registrado em: 29 Out 2009 20:12
Localização: Fortaleza

Re: Exemplo que imprima leitura X no [x]Harbour c/ DLL Daruma

Mensagem por ricardo-barros »

Ok. Resolvi Instalar o Harbour 2.0 que peguei hoje no sourceforge:
http://sourceforge.net/projects/harbour ... z/download

Function Main()
h1:= LoadLibrary("Daruma32.dll")
ret:= dllcall(h1,32,"Daruma_FI_LeituraX")
Return

Estou usando outro computador e nenhuma variável de ambiente foi configurada ainda.
Apenas descompactei tudo na pasta HB20 e compilei o programa acima desta maneira:
\HB20\BIN\HBMK2 X.PRG

Dá os seguintes erros:
undefined reference to HB_FUN_LOADLIBRARY
undefined reference to HB_FUN_DLLCALL

O que está faltando?
Responder