Página 1 de 1

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

Enviado: 03 Ago 2011 09:33
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

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

Enviado: 03 Ago 2011 10:49
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

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

Enviado: 03 Ago 2011 12:45
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.

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

Enviado: 03 Ago 2011 17:25
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.

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

Enviado: 04 Ago 2011 10:30
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

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

Enviado: 04 Ago 2011 11:18
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+

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

Enviado: 04 Ago 2011 11:25
por HASA
:))

Certo, mesmo sendo em modo console em xharbour pode postar no News que o Culik responde ok.
:)Pos
Hasa

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

Enviado: 29 Abr 2013 18:59
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


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

Enviado: 29 Abr 2013 20:12
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")

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

Enviado: 29 Abr 2013 20:54
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.

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

Enviado: 29 Abr 2013 21:23
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 ?

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

Enviado: 29 Abr 2013 23:21
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 )

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

Enviado: 01 Mai 2013 10:21
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.

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

Enviado: 01 Mai 2013 11:10
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).