NFe-s: erro ao usar DLL lotenfse no xHarbour!

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

Moderador: Moderadores

Avatar do usuário
ANDRIL
Usuário Nível 5
Usuário Nível 5
Mensagens: 1297
Registrado em: 06 Jul 2004 00:44
Contato:

NFe-s: erro ao usar DLL lotenfse no xHarbour!

Mensagem por ANDRIL »

Pessoal estou começando o processo de NFe-s ( nota fiscal de serviço eletronica ) como já tinha visto aqui no forum, parece que não ha um monitor tipo ACBRNFE que faça isso para nota de serviços.

Entao vendo a documentacao do site da NFE-CAMPINAS decidi baixar a LOTENFSE.DLL para usa-la com xHarbour (esta DLL foi feita em Delphi). Não sei se por isso nao consigo usar nenhum modulo dela, consigo carrega-la, mais sempre ao chamar o primeiro modulo, ocorre erro e exibe o opcao de debug com o VS2008 pois tenho instalado aqui na maquina.

Tem no pacote de exemplos, exemplos em CSharp, porem nem mesmo este funciona corretamente, sempre ocorre uma exceção e aborta o sistema.

Veja meu codigo inicial

Código: Selecionar todos


#define DC_CALL_STD            0x0020
procedure main()
local hdDLL:=LoadLibrary("c:\windows\system32\lotenfse.dll")

if hdDLL=0
   FreeLibrary( hdDLL )
   ?"Erro na DLL"
    return
else
   ?"Dll carregada"
endif

//faz declaracao sobre a url do webservice
pFunc:= GetProcAddress( hdDLL, "setURL" )
? pFunc
//---aqui pFunc me traz o ponteiro da funcao setURL dentro da DLL, ou seja, ele encontra a funcao

************************* O ERRO ACONTECE AQUI *******************************
cURL:=CallDLL( pFunc, 0, "setURL","http://treinamento.dsfweb.com.br/WsNFe2/LoteRps.jws",;
"http://treinamento.dsfweb.com.br/WsNFe2/LoteRps.jws?wsdl")
if cURL>0
? "Erro no endereco do WebService"+alltrim(str(cURL)))
*** CHEGA A EXIBIR ESTA MENSAGEM POREM O PROGRAMA É ABORTADO.
FreeLibrary( hdDLL )
return
else
? "WebService encontrado"
endif
Ja tentei registrar a DLL atraves do REGSVR32, diz que foi carregada, mas o ponto de entrada DLLRegisterServer não foi localizado. E logo em seguinda, abre o debug do VS2008.

Detalhe: ja tentei em modo console e tambem usando a HwGui e ocorrem os mesmos problemas. Creio que seja algo da DLL em si, mais conto com ajuda de todos.

Alguem tem ideia do que pode estar ocorrendo?
Abraços
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
Avatar do usuário
HASA
Colaborador
Colaborador
Mensagens: 1088
Registrado em: 01 Set 2003 19:50
Localização: São Paulo
Contato:

NFe-s: erro ao usar DLL lotenfse no xHarbour!

Mensagem por HASA »

:))
Ola Andril, essa não é exatamente minha praia mas... vc já tentou o implib e depois com a lib gerada compila-la ao seu sistema ?, quem sabe ?
Hasa
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

NFe-s: erro ao usar DLL lotenfse no xHarbour!

Mensagem por Jairo Maia »

Olá Andril,

Pouco (quase nada mesmo) posso ajudar, mas ficou dúvida na forma que vc instalou a dll. Vc copiou também borlndmm.dll para a pasta system32?

Outra coisa, pelo que lembro, a única dll que vc registra é a NFSe_UTIL.dll, que fica na mesma pasta do aplicativo, e usando o utilitário de registro que vem junto com a lotenfse.dll.
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Avatar do usuário
ANDRIL
Usuário Nível 5
Usuário Nível 5
Mensagens: 1297
Registrado em: 06 Jul 2004 00:44
Contato:

NFe-s: erro ao usar DLL lotenfse no xHarbour!

Mensagem por ANDRIL »

HASA escreveu:vc já tentou o implib e depois com a lib gerada compila-la ao seu sistema ?
Entao, fiz isso, gerou a LOTENFSE.LIB. Uso o HbMake indico a lib tanto como LIB externa e/ou LIB do usuario com caminho e tudo porem ao linkar o sistema acusa que a funcao que estou chamando nao existe e nao gera o exe.

Veja o erro
C:\xHWGUI\BCC55\BIN\ilink32 @makefile.lnk
Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland
Error: Unresolved external '_HB_FUN_SETURL' referenced from C:\NFE-S\OBJ\HWGUI.OBJ
Meu sistema ta com nome de HWGUI.PRG, NAO se assustem com esse HWGUI.OBJ

Usei o Explore Lib v2.0 e nele consta a funçao normalmente. Sera que nao esta linkando a lib?

Meu linker esta assim:
#BCC
VERSION=BCB.01
!ifndef CC_DIR
CC_DIR = $(MAKE_DIR)
!endif

!ifndef HB_DIR
HB_DIR = $(HARBOUR_DIR)
!endif

RECURSE= NO

SHELL =
COMPRESS = NO
EXTERNALLIB = NO
XFWH = NO
FILESTOADD = 5
WARNINGLEVEL = 0
USERDEFINE =
USERINCLUDE =
USERLIBS = C:\NFE-S\LOTENFSE.LIB
EDITOR = edit
HWGUI =
GUI = YES
MT = NO
SRC03 = obj
PROJECT = hwguiteste.exe $(PR)
OBJFILES = $(SRC03)\HWGUI.obj $(OB)
PRGFILES = HWGUI.PRG $(PS)
OBJCFILES = $(OBC)
CFILES = $(CF)
RESFILES =
RESDEPEN =
TOPMODULE = HWGUI.PRG
LIBFILES = hwgui.lib procmisc.lib hwg_qhtm.lib lang.lib vm.lib rtl.lib rdd.lib macro.lib pp.lib dbfntx.lib dbfcdx.lib dbffpt.lib common.lib gtgui.lib gtnul.lib codepage.lib ct.lib tip.lib pcrepos.lib hsx.lib hbsix.lib
EXTLIBFILES =
DEFFILE =
HARBOURFLAGS = -m -w0
CFLAG1 = -OS $(SHELL) $(CFLAGS) -d -c -L$(HB_DIR)\lib
CFLAG2 = -I$(HB_DIR)\include;$(CC_DIR)\include
RFLAGS =
LFLAGS = -L$(CC_DIR)\lib\obj;$(CC_DIR)\lib;$(HB_DIR)\lib -Gn -M -m -s -Tpe -x -aa -L$(HWGUI)\lib
IFLAGS =
LINKER = ilink32

ALLOBJ = c0w32.obj $(OBJFILES) $(OBJCFILES)
ALLRES = $(RESDEPEN)
ALLLIB = $(USERLIBS) $(LIBFILES) import32.lib cw32.lib
.autodepend

#DEPENDS

#COMMANDS
.cpp.obj:
$(CC_DIR)\BIN\bcc32 $(CFLAG1) $(CFLAG2) -o$* $**

.c.obj:
$(CC_DIR)\BIN\bcc32 -I$(HB_DIR)\include $(CFLAG1) $(CFLAG2) -o$* $**

.prg.obj:
$(HB_DIR)\bin\harbour -D__EXPORT__ -n -go -I$(HB_DIR)\include $(HARBOURFLAGS) -I$(HWGUI)\include -o$* $**

.rc.res:
$(CC_DIR)\BIN\brcc32 $(RFLAGS) $<

#BUILD

$(PROJECT): $(CFILES) $(OBJFILES) $(RESDEPEN) $(DEFFILE)
$(CC_DIR)\BIN\$(LINKER) @&&!
$(LFLAGS) +
$(ALLOBJ), +
$(PROJECT),, +
$(ALLLIB), +
$(DEFFILE), +
$(ALLRES)
!
Tem que declarar algum comando no inicio do prg principal para se usar uma lib de terceiros?
Jairo Maia escreveu: Vc copiou também borlndmm.dll para a pasta system32?
Sim, a lotenfse.dll e a borlndmm.dll
Jairo Maia escreveu:a única dll que vc registra é a NFSe_UTIL.dll
Sim, inclusive com um batch proprio. Fiz isso.

Vamos ver se clareiam nossas ideias.
Obrigado Hasa e Jairo.
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
Avatar do usuário
HASA
Colaborador
Colaborador
Mensagens: 1088
Registrado em: 01 Set 2003 19:50
Localização: São Paulo
Contato:

NFe-s: erro ao usar DLL lotenfse no xHarbour!

Mensagem por HASA »

:-o
Hummmm, como vc usa HWGUI o cara certo é o Culik, passe o caso para o News Xharbour, ai creio que vc resolva a parada ok.
:)Pos
Avatar do usuário
ANDRIL
Usuário Nível 5
Usuário Nível 5
Mensagens: 1297
Registrado em: 06 Jul 2004 00:44
Contato:

NFe-s: erro ao usar DLL lotenfse no xHarbour!

Mensagem por ANDRIL »

HASA escreveu:como vc usa HWGUI
Amigo, nao estou usando a HwGUI para este projeto, apenas foi uma forma de ver se o erro retornado era porque estava usando o modo console, mais o mesmo problema ocorreu tambem no modo grafico.

Ate+
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
Avatar do usuário
HASA
Colaborador
Colaborador
Mensagens: 1088
Registrado em: 01 Set 2003 19:50
Localização: São Paulo
Contato:

NFe-s: erro ao usar DLL lotenfse no xHarbour!

Mensagem por HASA »

:))

Certo, mesmo sendo em modo console em xharbour pode postar no News que o Culik responde ok.
:)Pos
Hasa
cruzbrasil
Usuário Nível 1
Usuário Nível 1
Mensagens: 17
Registrado em: 21 Jun 2010 11:25
Localização: Rio Grande do Sul

NFe-s: erro ao usar DLL lotenfse no xHarbour!

Mensagem por cruzbrasil »

Olá ANDRIL,

Eu consegui executar a DLL da seguinte forma:

Código: Selecionar todos


#include "dll.ch"
STATIC hNFSe_Util

FUNCTION TMP
LOCAL cRET
  
hNFSe_Util := LoadLibrary( "c:\windows\system32\lotenfse.dll" )

IF hNFSe_Util<=0
   ?'NAO CARREGOU'
   RETURN(.F.)
ENDIF

cRET:=ObterErroInterno(11)

?VALTOPRG(cRET)

RETURN(.T.)

DLL FUNCTION ObterErroInterno(a AS _INT) AS STRING PASCAL FROM "ObterErroInterno" LIB hNFSe_Util

Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

NFe-s: erro ao usar DLL lotenfse no xHarbour!

Mensagem por rochinha »

Amiguinhos,

No uso de DLLs é necessário prever algumas coisas.

Foi dito que existem códigos c-Sharp no source da DLL portanto não presume que a mesma seja para Delphi e sim para .Net.

DLLs .Net não são fáceis de linkar com Harbour/xHarbour e se o .Net Framework não estiver atualizado na maquina de uso o pau ocorrerá na aplicação por conta disto.

No código vi também que:

Código: Selecionar todos

local hdDLL:=LoadLibrary("c:\windows\system32\lotenfse.dll")
Neste caso carrega hdDLL e acho que este conteúdo deva ser repassado para as funções CallDLL():

Código: Selecionar todos

************************* O ERRO ACONTECE AQUI *******************************
cURL:=CallDLL( hdDLL, 0, "setURL","http://treinamento.dsfweb.com.br/WsNFe2/LoteRps.jws",;
       "http://treinamento.dsfweb.com.br/WsNFe2/LoteRps.jws?wsdl")
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
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

NFe-s: erro ao usar DLL lotenfse no xHarbour!

Mensagem por Itamar M. Lins Jr. »

Se não estou enganado esse é um dos problemas do xHarbour alertado pelo programador Przmek, porque não mantem o tipo hdDll que é pointer.
Transforma em numérico ocasionando esses erros.
In xHarbour above code creates pointer item ( VALTYPE(funcSym) == "P" )
which can be used in some cases like in Harbour but because xHarbour VM
does not know if given pointer item is function reference or not then in
such context xHarbour has to accept any pointer items as function
references so any user mistake can cause GPF or some HVM structure
corruptions.
Ps. Caso eu esteja errado, corrijam-me.

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
cruzbrasil
Usuário Nível 1
Usuário Nível 1
Mensagens: 17
Registrado em: 21 Jun 2010 11:25
Localização: Rio Grande do Sul

NFe-s: erro ao usar DLL lotenfse no xHarbour!

Mensagem por cruzbrasil »

Putz, não sabia destas desvantagens da DLL, perdi quase o dia todo em cima disso para acertar essa DLL...
Será que compensa abortar e começar a fazer tudo na unha ?
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

NFe-s: erro ao usar DLL lotenfse no xHarbour!

Mensagem por sygecom »

cruzbrasil escreveu:Putz, não sabia destas desvantagens da DLL, perdi quase o dia todo em cima disso para acertar essa DLL...
Será que compensa abortar e começar a fazer tudo na unha ?
Cruz,
Pode usar sem medo de ser feliz, se desse problema nós teríamos problemas com:
impressoras de cheque(chron32.dll, nscheq.dll e PertoChekSer.dll)
comunicação de balanças que usam (peso32.dll, sp400_32.dll )
com bgd.dll( carrega e manipula imagens )
com blat.dll ( envio de email )
com ie32_dll3.dll ( validação de inscrição estadual )
com FreeImage.dll( convertendo de BMP para JPG )
com jpg.dll ( print das telas )
Ahhhhhhh o mais importante de todos o FASTREPORT: FrSystH.dll ( esse de vez em quando da uns pau, mas é programador que faz caca...rsrsrsrsrs )
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

NFe-s: erro ao usar DLL lotenfse no xHarbour!

Mensagem por rochinha »

Amiguinhos,

Como frisei anteriormente, se a .DLL for para .Net Framework, duvido que consiga usá-la no Harbour diretamente.

Mas desejo boa sorte.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
marcos.gurupi
Usuário Nível 4
Usuário Nível 4
Mensagens: 939
Registrado em: 06 Jul 2004 11:53
Localização: Gurupi-TO

NFe-s: erro ao usar DLL lotenfse no xHarbour!

Mensagem por marcos.gurupi »

Eu aqui tenho muita dificuldade para usar qualquer DLL pelo DLLCALL(), inclusive jah fui desicorajado a usar a funcao DLLCAL() por programadores senior por aqui e nao vejo ninguem (do grupo da xharbour) mudando isso. Eu jah tentei por varias vezes usar a dllcall() para pegar o retorno da dll da bematech e nunca funcionou, acredito que por esses e outros motivos existem programadores mudando para o harbour. Eu ainda estou firme no xharbour ateh porque mudar agora eh complicado, com tanta coisa pra fazer (exisgencia do governo).
Marcos Roberto
NetService Software
Responder