Página 1 de 1

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

Enviado: 10 Dez 2009 16:57
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.

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

Enviado: 10 Dez 2009 18:52
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.

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

Enviado: 10 Dez 2009 21:12
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

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

Enviado: 10 Dez 2009 22:28
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.

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

Enviado: 11 Dez 2009 04:59
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.

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

Enviado: 11 Dez 2009 05:30
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.

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

Enviado: 11 Dez 2009 08:31
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.

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

Enviado: 11 Dez 2009 10:58
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.

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

Enviado: 11 Dez 2009 11:05
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.

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

Enviado: 11 Dez 2009 12:01
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.

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

Enviado: 12 Dez 2009 18:53
por sygecom
Ricardo,
Essa versão do Harbour está meia desatualizada, procure atualizar para a versão 2.0.

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

Enviado: 18 Set 2010 05:56
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?