Usando DLL via Harbour.

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: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Usando DLL via Harbour.

Mensagem por Itamar M. Lins Jr. »

Ola!
O acesso as DLL's do windows via Harbour está totalmente funcional.

Código: Selecionar todos

If File("bemafi32.dll")
   hDll:=DllLoad("bemafi32.dll")
Else
   MsgStop("Falha carregando bemafi32.dll")
   return .f.
EndIf

Código: Selecionar todos

            nRetVal := DllCall(hDll,DLL_OSAPI,"Bematech_FI_VendeItem",;
                                             pd->cod_mercad,;
                                             substr(pd->mercadoria,1,29),;
                                             eq->situa_trib,;
                                             "F",;
                                             Zero_Esq(pd->quantidade,7,3),;
                                             2,;
                                             zero_esq(pd->preco_unit,8,2),;
                                             SD,;
                                             Desc)

            If nRetVal <> 1
                MsgStop("Bematech_FI_VendeItem: "+str(nRetVal))
            EndIf
Acessando o rmchart usando Hwgui.

Código: Selecionar todos

******************************
Function Grafico(sTemp,lPrint)
******************************
*
*
Local oMainWindow, oFont, hDll

   hDll:=DllLoad("rmchart.dll")

   PREPARE FONT oFont NAME "Times New Roman" WIDTH 0 HEIGHT -17 CHARSET 4

   INIT DIALOG oMainWindow  TITLE "GRÁFICO"  Font oFont AT 0,0 SIZE 910,620 STYLE DS_CENTER+WS_OVERLAPPEDWINDOW+WS_VISIBLE ;
   On Init {|| Chart(hDll,oMainWindow,sTemp) }
   @ 820,020 ButtonEx oBtPrint Caption ''  TRANSPARENT of oMainWindow Style WS_TABSTOP Size 70,70 BITMAP (HBitmap():AddFile(cImageDir+'impressora.bmp')):handle BSTYLE 1 ON CLICK {||PrintChart(hDll,oMainWindow)}

   oMainWindow:Activate()

Return nil

**************************************
Function Chart(hDll,oMainWindow,sTemp)
**************************************
*
*
Local nRetVal:=0
nRetVal := DllCall(hDll,DLL_OSAPI,"RMC_CREATECHARTFROMFILE",oMainWindow:Handle,1001,10,10,0,sTemp)
nRetVal := DllCall(hDll,DLL_OSAPI,"RMC_DRAW",1001)
return ""

Muito mais simples do que ficar usando gambiarras de arquivos *.c e ou ficar dependendo da boa vontade de fulano para acrecentar novos comandos nestes arquivos, por exemplo uma nova função na DLL da Bematech.

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
janio
Colaborador
Colaborador
Mensagens: 1846
Registrado em: 06 Jul 2004 07:43
Localização: UBAJARA - CE

Re: Usando DLL via Harbour.

Mensagem por janio »

Itamar,

Ontem mesmo coloquei no news do xharbour exatamente essa indagação. Pq utilizar esses arquivos .c se se pode utilizar a dll diretamente????

Além de todos esses incômodos pra quem usa o .c, ainda tem também o fato de que a cada vs da dll, deve ser também gerado a nova lib corresponde e linkada ao nosso exe. Pra quem usa PAF isso é um tormento pq a cada vez que vc mudar o exe tem que refazer a homologação. Usando a dll diretamente, basta atualizar no cliente e seu exe continua o mesmo.

Atualmente estou utilizando os dois jeitos: Para a bematech uso o .c. Para a Daruma tô usando diretamente a dll. Tem funcionado bem nos dois casos. Mas gostaria de eliminar um e ficar com o outro.

Eu uso xharbour1.0. Sabe dizer se o xharbour tem algum bug que faça com que não seja aconselhável usar diretamente a dll???

Janio
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Re: Usando DLL via Harbour.

Mensagem por Itamar M. Lins Jr. »

Ola!
Só testando.
Eu sei que no Harbour 2.01 está funcionando bem.

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
alaminojunior
Colaborador
Colaborador
Mensagens: 1717
Registrado em: 16 Dez 2005 21:26
Localização: Ubatuba - SP

Re: Usando DLL via Harbour.

Mensagem por alaminojunior »

Jânio, não entendí.
Para Daruma e Bematech eu trabalho direto com as DLL´s de ambas, sem precisar de nenhum arquivo em .c.
Qual a dificuldade ?
Compilador xHarbour 1.2.3 + Embarcadero C++ 7.30
MySQL c/ SQLRDD
HwGui + GTWVG
Avatar do usuário
janio
Colaborador
Colaborador
Mensagens: 1846
Registrado em: 06 Jul 2004 07:43
Localização: UBAJARA - CE

Re: Usando DLL via Harbour.

Mensagem por janio »

edson, tbem uso a dll sem problema!

A pergunta é justamente essa: se funciona usando a dll diretamente, pq usar o .c?

Eu queria entender isso
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Usando DLL via Harbour.

Mensagem por Pablo César »

Valeu Itamar ! Eu não sabia que tinha que carregar na memória a DLL para depois utilizar a DllCall... Cómo é ótimo estar a par desses esclarecimentos. Obrigadu...

Agora resta-me comprovar se posso utilizar as dlls no HMG diretamentamente sem precisar de bibliotecas. Vou fazer uns testes e volto... todo indica que não teria porquê não usar diretamente pelo Harbour e não pela biblioteca ".a"...
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Usando DLL via Harbour.

Mensagem por Pablo César »

Para auxiliar na busca dos nomes das funções que contém cada DLL, eu achei estes aplicativos que listam os nomes:

http://www.dependencywalker.com/Página para download, com opções em diferentes suportes de versão. Esta informação foi obtida nesta matéria: http://balaiotecnologico.blogspot.com/2 ... -numa.html

E este outro aplicativo: http://www.baixaja.com.br/downloads/Win ... r_165.html

Se bem que o nome das funções ajuda bastante, os parâmetros de cada função deverão ser conhecidos através do autor de cada dll ou através dos fontes.
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar do usuário
fladimir
Colaborador
Colaborador
Mensagens: 2445
Registrado em: 15 Nov 2006 20:21

Re: Usando DLL via Harbour.

Mensagem por fladimir »

Tb tem o ExplorerLIB, q o Rochinha passou num outro tópico onde o mesmo disse o seguinte:
Amiguinho,

Geralmente, podemos saber quais as funções que compoem uma .DLL através da transformação para uma .LIB.

Não se trata de uma transformação e sim da geração de uma biblioteca de funções a partir do conteúdo de uma .DLL.

Para isto use o Borland IMPLIB.EXE, assim IMPLIB ACBrECFDLL.LIB ACBrECFDLL.DLL

Não esta errado não é esta a sequencia.

A partir da .LIB gerada voce poderá saber quais funções existem na mesma e para isto será necessário um segundo utilitário:


Explorer Lib v2.0

Com este utilitário voce praticamente navegará dentro da biblioteca e verá quais suas funções e consequentemente como estão escritas.
Sds. Sucesso!!!!

:xau
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:

“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”
.


Até 2017    Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL


Novos Projetos:

   Desktop Visual           Windev Desktop
   Celular Android/iOS   Windev Mobile
   WEB                            Windev Web


Sejamos gratos a Deus.
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Re: Usando DLL via Harbour.

Mensagem por Maligno »

Nada disso garante o acesso às informações acerca dos parâmetros das funções. Sem isso, nada feito.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Avatar do usuário
fladimir
Colaborador
Colaborador
Mensagens: 2445
Registrado em: 15 Nov 2006 20:21

Re: Usando DLL via Harbour.

Mensagem por fladimir »

Verdade Maligno, essa é uma dificuldade q tenho, e aí tem algum modo de saber??? Ou somente através do contato com os criadores da Dll??

Sds.

Sucesso!!!

:)Pos
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:

“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”
.


Até 2017    Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL


Novos Projetos:

   Desktop Visual           Windev Desktop
   Celular Android/iOS   Windev Mobile
   WEB                            Windev Web


Sejamos gratos a Deus.
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Usando DLL via Harbour.

Mensagem por Pablo César »

Maligno escreveu:Nada disso garante o acesso às informações acerca dos parâmetros das funções. Sem isso, nada feito.
Pablo César escreveu:Se bem que o nome das funções ajuda bastante, os parâmetros de cada função deverão ser conhecidos através do autor de cada dll ou através dos fontes.
Por isso que já de cara tinha colocado essa observação. Isso não garante mesmo conhecer a sintaxe, mas já pelo nome da função ao menos podemos correr atrás de mais informação pela internet e com isso chegar a conhecer quem sabe o código fonte ou até mesmo a sintaxe das mesmas. Pior seria não saber nada...
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Re: Usando DLL via Harbour.

Mensagem por Maligno »

Sim, melhor ter pouco do que nada. Ter o nome da função já é uma pista para conseguir mais informações na internet. Mas nem sempre é possível, principalmente quando o material não é tão popular. Melhor seria poder contar com a documentação daquele que desenvolveu o software. Seria o mais certo também.

Algumas funções, só pelo nome, até já dão alguma pista a respeito. Às vezes não há argumento algum, às vezes o argumento é uma simples string, um inteiro, etc. O mesmo vale para o retorno. Mas infelizmente nem sempre é assim tão fácil.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Responder