Página 1 de 1

Usando DLL via Harbour.

Enviado: 10 Dez 2010 11:34
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.

Re: Usando DLL via Harbour.

Enviado: 10 Dez 2010 12:24
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

Re: Usando DLL via Harbour.

Enviado: 10 Dez 2010 12:50
por Itamar M. Lins Jr.
Ola!
Só testando.
Eu sei que no Harbour 2.01 está funcionando bem.

Saudações,
Itamar M. Lins Jr.

Re: Usando DLL via Harbour.

Enviado: 11 Dez 2010 22:12
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 ?

Re: Usando DLL via Harbour.

Enviado: 12 Dez 2010 16:07
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

Usando DLL via Harbour.

Enviado: 17 Mar 2011 10:34
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"...

Usando DLL via Harbour.

Enviado: 17 Mar 2011 11:27
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.

Re: Usando DLL via Harbour.

Enviado: 19 Mar 2011 12:43
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

Re: Usando DLL via Harbour.

Enviado: 19 Mar 2011 12:52
por Maligno
Nada disso garante o acesso às informações acerca dos parâmetros das funções. Sem isso, nada feito.

Re: Usando DLL via Harbour.

Enviado: 19 Mar 2011 21:09
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

Usando DLL via Harbour.

Enviado: 20 Mar 2011 09:49
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...

Re: Usando DLL via Harbour.

Enviado: 20 Mar 2011 10:35
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.