Usar DLL no Harbour

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

Moderador: Moderadores

Eduardo Pinho
Colaborador
Colaborador
Mensagens: 72
Registrado em: 13 Jun 2014 19:30
Localização: Niteroi

Usar DLL no Harbour

Mensagem por Eduardo Pinho »

Amigos,

Uso Harbour 3.0 e quero usar uma DLL que um amigo gerou pra mim pelo Visual Fox.

Só que nao funciona de jeito nenhum...

Essa funciona bem:
Ret:= hb_DynCall( { "MessageBoxA", "user32.dll", HB_DYN_CALLCONV_STDCALL }, 0, "Isto é uma MessageBOX !", "Teste DLL", 0 )

Mas a que ele gerou no Fox nao funciona. Ja tentei carregando primeiro com hb_libload mas nao adiantou.

Ele fez uma pesquisa e disse que descobriu o problema. Disse que o Fox gera DLL orientada a objeto e que o Harbour nao consegue ler dessa forma.

Sabem, por acaso, se isso procede? Se é realmente isso, e se tem alguma forma de fazer ela funcionar?

Agradeço a ajuda. Abcs.
Avatar do usuário
Mario Mesquita
Usuário Nível 4
Usuário Nível 4
Mensagens: 613
Registrado em: 08 Dez 2009 13:47
Localização: Rio de Janeiro

Usar DLL no Harbour

Mensagem por Mario Mesquita »

Bom dia.

Não sei se ajuda, mas outro dia precisei usar uma DLL e consegui baseado num post de um colega.

No Main:

Código: Selecionar todos

DECLARE DLL_TYPE_HBITMAP FastQRCode (DLL_TYPE_LPCSTR file, DLL_TYPE_LPCSTR path) IN QrCodeLib.dll
A função:

Código: Selecionar todos

FUNCTION Gera_FastQRCode(nArq, nTxt)

cTexto := nTxt
cFile  := _xPht + nArq + ".jpg"
FastQRCode(cTexto, cFile)
//msginfo('gerou no fast a imagem '+cfile)

RETURN NIL
Essa função "FastQRCode" está na DLL.

Sds,
Mario.
Avatar do usuário
janio
Colaborador
Colaborador
Mensagens: 1846
Registrado em: 06 Jul 2004 07:43
Localização: UBAJARA - CE

Usar DLL no Harbour

Mensagem por janio »

O que pode estar acontecendo tbm eh que algumas dll's retornam um ponteiro para um endereço de memória, e precisamos de uma função pra traduzir esse negocio, tipo:

Código: Selecionar todos

#pragma BEGINDUMP

#include <windows.h>
#include "hbapi.h"
#include "hbapierr.h"

HB_FUNC( RETORNATAMANHOBUFFER )
{
   hb_retni( strlen( (const char *) hb_parni(1) ) );
}

#pragma ENDDUMP
/*--------------------------------------------------------------------------------------*/
/*--------------------------------------------------------------------------------------*/

Function Dll_ConsultarMFE
Local nRandom := HB_RANDOMINT(1,999999)
Local cRet

If nDllMfe != Nil
	cRet := Hb_dynCall( { "ConsultarSAT", nDllMfe, HB_DYN_CALLCONV_STDCALL}, nRandom )
	cRet := HB_Pointer2String( cRet, RetornaTamanhoBuffer(cRet) )
	If Empty(cRet)
		cRet := "ERRO ConsultarMFE: SEM RESPOSTA DO MFE|"	
	Endif
Else
	cRet := "ERRO ConsultarSAT: MFe.Dll nao carregada|"
Endif

Return cRet
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
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Usar DLL no Harbour

Mensagem por JoséQuintas »

DLL específica de Visual Fox só funciona no Visual Fox
DLL específica de Harbour só funciona no Harbour
DLL que contém componente instalável, só funciona instalada
etc.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Eduardo Pinho
Colaborador
Colaborador
Mensagens: 72
Registrado em: 13 Jun 2014 19:30
Localização: Niteroi

Usar DLL no Harbour

Mensagem por Eduardo Pinho »

Obrigado a todos pelas dicas. Vou analisar uma solucao depois.. Valeu mesmo!!!!!
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Usar DLL no Harbour

Mensagem por JoséQuintas »

janio escreveu:O que pode estar acontecendo tbm eh que algumas dll's retornam um ponteiro para um endereço de memória, e precisamos de uma função pra traduzir esse negocio, tipo:
Ué... se precisa ponteiro, é passar ponteiro.
O que normalmente precisa é espaço suficiente na variável.

x:= Space(50000)
FuncaoDll( @x )
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Usar DLL no Harbour

Mensagem por JoséQuintas »

Outra opção: usar diretamente o Visual Foxpro, e nem precisar criar DLL

Código: Selecionar todos

 vfp = win_oleCreateObject("VisualFoxPro.Application")
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
vagucs
Membro Master
Membro Master
Mensagens: 1480
Registrado em: 10 Jul 2004 10:45
Localização: Ipanema - MG
Contato:

Usar DLL no Harbour

Mensagem por vagucs »

Ola Janio, conseguiu usar a DLL MFE.DLL da sefaz do cerá?

Estou usando hblibload do harbour e nao carrega a dll.
Sem mais
Wagner Nunes
www.vagucs.com.br
lucimauro
Usuário Nível 3
Usuário Nível 3
Mensagens: 465
Registrado em: 21 Set 2004 21:02
Localização: Sobral-CE

Usar DLL no Harbour

Mensagem por lucimauro »

Qual a mensagem de erro que retorna vagucs?
Avatar do usuário
vagucs
Membro Master
Membro Master
Mensagens: 1480
Registrado em: 10 Jul 2004 10:45
Localização: Ipanema - MG
Contato:

Usar DLL no Harbour

Mensagem por vagucs »

Poxa, consegui, eu setei o path para o diretório da DLL e foi. Isso se deve a ela usar outras DLLs no diretório.
Sem mais
Wagner Nunes
www.vagucs.com.br
Avatar do usuário
janio
Colaborador
Colaborador
Mensagens: 1846
Registrado em: 06 Jul 2004 07:43
Localização: UBAJARA - CE

Usar DLL no Harbour

Mensagem por janio »

Poxa, consegui, eu setei o path para o diretório da DLL e foi. Isso se deve a ela usar outras DLLs no diretório.
Exato. Sabemos de alguns casos que so funciona se setar o path onde a dll está (senão da erro de dependência de outras dll's).

No meu caso não precisou disso. Foi so carregar a dll e pronto
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
vagucs
Membro Master
Membro Master
Mensagens: 1480
Registrado em: 10 Jul 2004 10:45
Localização: Ipanema - MG
Contato:

Usar DLL no Harbour

Mensagem por vagucs »

Janio,

E conseguiu homologar?

Compramos DIMEP, mas os cara da DIMEP mesmo nao sabem dar suporte, precisamos fazer homologação ainda la, teve algum entrave?

Vi comentários sobre a dll, que tem as mesmas chamadas do SAT, ai fica transparente, porém também vi gente reclamando, que algumas operações não funcionam, como cancelamento, o que sentiu a respeito da DLL? ta fluindo?
Sem mais
Wagner Nunes
www.vagucs.com.br
Avatar do usuário
janio
Colaborador
Colaborador
Mensagens: 1846
Registrado em: 06 Jul 2004 07:43
Localização: UBAJARA - CE

Usar DLL no Harbour

Mensagem por janio »

Homologamos no início, beeeeem no início. Com relação ao Cfe e a dll ta tudo funcionando e muito bem. O que não funciona é NFCe (até onde testei não conseguia cancelar uma NFCe)

Outro detalhe eh que pra NFCe obrigatoriamente tem que usar o Integrador. Eh um balaio de gato do cao. So quem vem acompanhando desde o início pra entender
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
vagucs
Membro Master
Membro Master
Mensagens: 1480
Registrado em: 10 Jul 2004 10:45
Localização: Ipanema - MG
Contato:

Usar DLL no Harbour

Mensagem por vagucs »

Faço ideia, nosso PDV está homologado e rodando em todos os estados, com NFE, NFCE, SAT e agora mais essa inhaca, fora homologação de PAF-ECF que vamos ter que fazer agora só por causa de SC, é fogo esse brasil, tinhamos que fazer um abaixo assinado para acabar com esse PAF-ECF que é só para dar dinheiro para escolas de ensino que sempre tem um deputado ou senador por trás.

Veja os arquivos que o PDF tem que gerar, tem 8 anos que fazemos a homologação e os arquivos até hoje não tem validador, cada homologador valida como bem entende, tudo no olho e comem todo ano 2 a 3 dias com isso, todo ano temos que adequar ao que o homologador pensa.
Sem mais
Wagner Nunes
www.vagucs.com.br
Avatar do usuário
janio
Colaborador
Colaborador
Mensagens: 1846
Registrado em: 06 Jul 2004 07:43
Localização: UBAJARA - CE

Usar DLL no Harbour

Mensagem por janio »

Homologamos no início, beeeeem no início. Com relação ao Cfe e a dll ta tudo funcionando e muito bem. O que não funciona é NFCe (até onde testei não conseguia cancelar uma NFCe)
Ahhh lembrando que o CFe ta funcionando bem agora, ultimamente. Mas foram quase 2 anos de sofrimento graaaannnde. So passou a funcionar quando tiraram o Integrador do meio e fizeram ajustes no Driver Mfe Sefaz. Agora vc consegue conversar diretamente com a dll.

Agora está igual ao SAT de São Paulo. Vc conversa com a dll... as chamadas a dll são exatamentes as mesmas do SAT. A única diferença que ainda há em relação ao SAT/São Paulo eh que aqui ainda existe a necessidade de instalar o Driver MFe da Sefaz.

Pra resumir ficou assim agora, vc tem 2 maneiras de comunicação com MFe e aí vc escolhe qual quer usar:
1- Maneira antiga pelo Integrador (vc gera um xml na pasta input do Integrador e espera a resposta na pasta Output).
2- Não usa o Integrador e conversa diretamente com a dll, exatamente como São Paulo (esse modo ta funcionando bem)

Quando homologamos so existia a opção com Integrador. Eu não sei se atualmente pode homologar com a opção sem integrador. Lembrando que que a opção por dll eh apenas para comunicaçao com o Mfe. Para o métodos de pagamento ainda eh obrigatorio o Integrador. Como disse... um balaio de gato que so quem vem acompanhando desde o início pra entender

Janio
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
Responder