Clipper On Line • Ver Tópico - Dll nao carrega

Dll nao carrega

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

Moderador: Moderadores

 

Dll nao carrega

Mensagempor Itamar M. Lins Jr. » 23 Jun 2020 00:39

Ola!
O ACBr, eu já baixo do SVN e compilo, instalo os pacotes no Lazarus.
Pelo que tenho entendido, essa restrição é para quem não usa Lazarus. Quem usa Lazarus/Delphi não precisa de DLL nem do Monitor, isso é só para as outras linguagens.
Fora um suporte específico, algum eventual problema, para quem usa Delphi/Lazarus precisara pagar se assim desejar.

Saudações,
Itamar M. Lins Jr.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6950
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 312 vezes
Mens.Curtidas: 507 vezes

Dll nao carrega

Mensagempor NiltonGM » 23 Jun 2020 10:21

JoséQuintas escreveu:qu

Resolvi usando as funções que vc indicou hb_DynCall(). Obrigado.
rubens escreveu:Bom dia...

Nilton.. é meio chatinho mesmo, até pegar o jeito...

Para ler um ini
// ACbrNfe.dll
#define DC_CALL_STD 0x0020      // __stdcall
#define DLL_OSAPI DC_CALL_STD
#define STR_LEN 256
#define ACBrLIB "ACBrNFe32.dll"
   
FUNCTION LerIni_acbr(cSecao, cChave, cFile) 

   LOCAL GetList    := {} 
   Local cTexto    := ''
   Local cBufferlen
   Local hLib
   Local iRetorno
   
   If ! File( cFile )
      Return ''
   EndIf
   
   hLib       := DllLoad( ACBrLIB )
   iRet       := DllCall( hLib, DLL_OSAPI, "NFE_Inicializar", "", "")
   bufferLen:= STR_LEN
   cTexto    := Space(bufferLen)
   iRet      := DllCall( hLib, DLL_OSAPI,"NFE_ConfigLer", cFile )
   iRet      := DllCall( hLib, DLL_OSAPI,"NFE_ConfigLerValor", hb_StrToUTF8(cSecao), hb_StrToUTF8(cChave), @cTexto, @bufferLen )
   iRet       := DllCall( hLib, DLL_OSAPI,"NFE_Finalizar")    
   hLib       := NIL
   
   If iRet = 0
      // Gambiarra até saber como usa stran para retirar o ultimo caracter
      cTexto := Left( cTexto, Len(Alltrim(cTexto)) -1 )
   Else
      cTexto    := ''
   EndIF

   RETURN cTexto


Para imprimir Danfe ou gerar o pdf
FUNCTION ImprimirPDFNfe(cArq, lPdf)  

   LOCAL cTela    := SaveScreen() 
   LOCAL GetList    := {} 
 
   Local cTexto    := ''
   Local cBufferlen
   Local hLib
   
   hLib       := DllLoad(ACBrLIB)
        iRet       := DllCall(hLib, DLL_OSAPI, "NFE_Inicializar", "", "")
   bufferLen:= STR_LEN
   cTexto    := Space(bufferLen)
   
   iRet       := DllCall(hLib, DLL_OSAPI, "NFE_CarregarXML", hb_StrToUTF8(cArq))
   
   If lPdf
      iRet       := DllCall(hLib, DLL_OSAPI, "NFE_ImprimirPDF")
   Else
      iRet      := DllCall(hLib, DLL_OSAPI,"NFE_Imprimir", hb_StrToUTF8(""), 1, hb_StrToUTF8(""), hb_StrToUTF8("True"), hb_StrToUTF8(""), hb_StrToUTF8(''), hb_StrToUTF8(""))      
   EndIf
   
   iRet       := DllCall( hLib, DLL_OSAPI,"NFE_Finalizar")    
   hLib       := NIL

   RETURN nil

Detalhes.. você tem que carregar o xml, depois é só mandar gerar o PDF ou imprimir. Depois que carregar o xml não precisa mais fazer referência a ele. É muito rápido e dinâmico.. porque não precisa alterar o layout.. é só baixar a última versão que todas as mudanças necessárias já estão prontas.
o PDF será gerado na path configurado no acbrlib.ini
tem que ter todas estas libs na pasta do executável.
Dlls do acbrlib.png

Agora que você que manja bem de classe... pode dar uma olhada no acbrnfedemo do projeto... tem classe para a nfe pronta e até para boleto.
A maioria dos comandos do acbrmonitor estão no acbrnfedemo..
Isso compilo com Hb32
Att..

Rubens


Valeu Rubens, só não entendo como é que vocês usam a DllCall() se essa função não existe, dá erro, vocês usam alguma lib de terceiros? Como o Zeh disse, estou usando a hb_DynCall().
Grato.

Itamar M. Lins Jr. escreveu:Ola!
O bat para compilar o ACBr.
@echo off

setlocal EnableDelayedExpansion

cls
echo.
echo.
echo. Utilitario para baixar e compilar o ACBrMonitorPlus.exe
echo.
echo. Para Prosseguir Voce Precisara:
echo.
echo. - GIT INSTALADO
echo. - SVN COM COMMAND LINE TOOLS
echo. - LAZARUS INSTALADO NA PASTA PADRAO C:\LAZARUS
echo.

:init0 (
    echo.
    choice /c SN /n /m "Podemos Continuar? [S/N]"
    if %errorlevel% EQU 1 goto :init1
    if %errorlevel% EQU 2 goto :end
)

:init1 (

    set lazarus_home=c:\lazarus
    set path=%path%;%lazarus_home%

    echo.
    echo.
    choice /c SN /n /m "ATENCAO... Deseja fazer o checkout dos fontes (apaga e baixa)? [S/N]"
    if %errorlevel% EQU 1 goto :checkout
    if %errorlevel% EQU 2 goto :make
)

:checkout (

    if exist C:\FontesACBr (
        rd /s /q C:\FontesACBr
    ) else (
        echo Pasta C:\FontesACBr sera criada...
    )

    md C:\FontesACBr

    git clone https://github.com/fortesinformatica/fortesreport-ce.git C:\FontesACBr\fortesreport-ce
    if %errorlevel% NEQ 0 goto :error

    svn co svn://svn.code.sf.net/p/acbr/code/trunk2 C:\FontesACBr
    if %errorlevel% NEQ 0 goto :error

    svn co svn://svn.code.sf.net/p/lazarus-ccr/svn/components/powerpdf C:\FontesACBr\powerpdf
    if %errorlevel% NEQ 0 goto :error

)

:make (

        rem Compila‡Æo Incremental (compila a fonte principal (Main Source) e as fontes com datas mais recentes)
        lazbuild.exe C:\FontesACBr\Projetos\ACBrMonitorPLUS\Lazarus\ACBrMonitor.lpi --verbose --bm=Release
       
        rem Compila‡Æo nÆo Incremental (Build All - compila todos os fontes)
        rem lazbuild.exe C:\FontesACBr\Projetos\ACBrMonitorPLUS\Lazarus\ACBrMonitor.lpi -B --verbose --bm=Release
       
        if %errorlevel% NEQ 0 goto :error

)
   
echo.
echo. OK... Sucesso...
goto :end

:error (
    echo.
    echo. FALHOU... Houve Erro na Compilacao...
    goto :end
)
:end

O erro acontece nessa linha!

C:\devl\acbr>lazbuild.exe C:\devl\acbr\Projetos\ACBrMonitorPLUS\Lazarus\ACBrMonitor.lpi --verbose --bm=Release
Parameter: bm=Release
Hint: (lazarus) primary config path: C:\Users\Ricardo Mello\AppData\Local\lazarus
Hint: (lazarus) [TBuildManager.SetBuildTarget] Old=x86_64-win64-win32 New=x86_64-win64-win32 Changed: OS/CPU=True LCL=False
Erro: (lazarus) modo de construção inválido "Release"

Modos de construção de projeto disponíveis:
* Debug
  Release-Win32-i386
  Release-Win64-x86_64
  Release-Linux-x86_64
  Release-Linux-i386

Pelo erro, basta editar a linha do bat e acrescentar, mas quem removeu isso ?
>lazbuild.exe C:\devl\acbr\Projetos\ACBrMonitorPLUS\Lazarus\ACBrMonitor.lpi --verbose --bm=Release
Para:
>lazbuild.exe C:\devl\acbr\Projetos\ACBrMonitorPLUS\Lazarus\ACBrMonitor.lpi --verbose --bm=Release-win64-x86_64
Mas isso tudo só vai funcionar "SE" você compilar e incorporar na IDE do Lazarus, os chamados pacotes do ACBr.
C:\devl\acbr>lazbuild.exe C:\devl\acbr\Projetos\ACBrMonitorPLUS\Lazarus\ACBrMonitor.lpi --verbose --bm=Release-win64-x86_64
Parameter: bm=Release-win64-x86_64
Hint: (lazarus) primary config path: C:\Users\Ricardo Mello\AppData\Local\lazarus
Hint: (lazarus) [TBuildManager.SetBuildTarget] Old=x86_64-win64-win32 New=x86_64-win64-win32 Changed: OS/CPU=True LCL=False
Hint: (lazarus) [TBuildManager.SetBuildTarget] Old=x86_64-win64-win32 New=x86_64-win64-win32 Changed: OS/CPU=True LCL=False
Hint: (lazarus) package FCL 1.0.1 was compiled via "make" with parameters " -Fu.  -MObjFPC -Scghi -O1 -g -gl -l -vewnhibq fcllaz.pas"
Hint: (lazarus) package LazUtils 1.0 was compiled via "make" with parameters " -Fu..\..\packager\units\x86_64-win64;.  -MObjFPC -Scghi -O1 -g -gl -l -vewnhibq lazutils.pas"
Hint: (lazarus) package LCLBase 2.0.8 was compiled via "make" with parameters " -MObjFPC -Scghi -O1 -g -gl -vew -l -Fuforms;widgetset;;..\packager\units\x86_64-win64;..\components\lazutils\lib\x86_64-win64;. -Fiinclude alllclunits.pp"
Hint: (lazarus) package LCL 2.0.8 was compiled via "make" with parameters " -MObjFPC -Scghi -O1 -g -gl -vewnhi -l -Fuwin32;..\..\packager\units\x86_64-win64;..\..\components\lazutils\lib\x86_64-win64;..\units\x86_64-win64;. -Fiwin32 lcl.pas"
Hint: (lazarus) package cairocanvas_pkg 0.0 was compiled via "make" with parameters " -Fu..\..\packager\units\x86_64-win64;..\lazutils\lib\x86_64-win64;..\..\lcl\units\x86_64-win64;..\..\lcl\units\x86_64-win64\win32;.  -MObjFPC -Scghi -O1 -g -gl -l -vewnhibq -dLCL -dLCLwin32 cairocanvas_pkg.pas"
Hint: (lazarus) package LazControls 1.0.1 was compiled via "make" with parameters " -Fu..\..\packager\units\x86_64-win64;..\lazutils\lib\x86_64-win64;..\..\lcl\units\x86_64-win64;..\..\lcl\units\x86_64-win64\win32;.  -MObjFPC -Scghi -O1 -g -gl -l -vewnhibq -dLCL -dLCLwin32 lazcontrols.pas"


Saudações,
Itamar M. Lins Jr.


Itamar, eu tbm atualizalo a pasta ACBr pelo SVN mas até hoje não consegui compilar o ACBrMonitor pelo Lazarento e nem faço ideia como eles geram as DLL's do ACBrLib... Então este mês eu fiz assinatura no Forum, se precisarem de algo atualizado é só me falar até vcs fazerem a assinatura tbm. Fui ajudado no inicio até eu poder deixar de pagar empresas de terceiros e poder assinar. Faz uns 30 dias que comecei usar o ACBrMonitorPlus para autorização de CTe, agora estou testando as DLLs para ter mais controle das repostas de retornos, pois pelo ACBrMonitor vc não tem um bom controle. Fiquei sabendo que estão criando classes de alto nível para PHP do ACBrLib como já existe para o Delphi.
Nilton Medeiros
nilton@sistrom.com.br
Avatar de usuário

NiltonGM
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 393
Data de registro: 05 Jun 2014 23:47
Cidade/Estado: Caieiras/SP
Curtiu: 249 vezes
Mens.Curtidas: 25 vezes

Dll nao carrega

Mensagempor Itamar M. Lins Jr. » 23 Jun 2020 10:50

Ola!
ACBrMonitor vc não tem um bom controle

Quando usamos o certificado de 3 anos ou pendrive, cartão é muito mais lento.
O certificado de 1 ano é melhor e mais rápido.
Coisas do Brasil, o certificado mais caro é pior.
Eu acredito que é super válido pagar o suporte. Mas é suporte! Ninguém tem obrigação de ensinar nada de graça, ainda mais uma coisa tão técnica que é essa área.
Mas colocar uma coisa que não funciona, ou incompleta e apontar caminho como direção a seguir é que sou contra. Tem, tem, não tem não tem. Para as pessoas aqui do forum não ficar de mi,mi... só postei pq tem várias questões de como usar PASCAL com Harbour.
Se vc usa Lazarus, tá tudo lá é só clicar e instalar(leia o manual, assista aos vídeos, siga algum roteiro), para outras linguagens não.

Saudações,
Itamar M. Lins Jr.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6950
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 312 vezes
Mens.Curtidas: 507 vezes

Dll nao carrega

Mensagempor Itamar M. Lins Jr. » 23 Jun 2020 11:03

Ola!
Antes de rodar o BAT tem que adicionar o PACOTES do ACBr ao Lazarus.
O Bat é um arquivo que vem e está no SVN. BuildAcrb.Bat
E no SVN tem um PDF, Bem_Vindo_ao_Trunk2.pdf que ensina como adicionar os pacotes do ACBr ao Lazarus.
Sem título.png

Quem usa o BAT e o programa acbrmonitor_etc.exe são ferramentas de terceiros. Repetindo para o Lazarus não é necessário.
Ai que está o problema, pq não funciona, embora tenha como roteiro a seguir, quem vê pela primeira vez fica sem entender.

Saudações,
Itamar M. Lins Jr.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6950
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 312 vezes
Mens.Curtidas: 507 vezes

Dll nao carrega

Mensagempor rubens » 23 Jun 2020 22:51

Boa noite..
Valeu Rubens, só não entendo como é que vocês usam a DllCall() se essa função não existe, dá erro, vocês usam alguma lib de terceiros? Como o Zeh disse, estou usando a hb_DynCall().
Grato.

NIlton... assim de bate pronto, acho que a dllcall() é do xharbour daí tem que compilar com -lxhb. Acho que todos as funções do xharbour se compilar com -lxhb funcionam no harbour... se eu estiver errado alguem vai me corrigir..
Eu tentei com hb_DynCall() mas não carregou a lib. Provavelmente algum erro meu...

Att..
Rubens
"Eu e minha casa servimos ao Senhor e você ???"
Avatar de usuário

rubens
Colaborador

Colaborador
 
Mensagens: 1518
Data de registro: 16 Ago 2003 09:05
Cidade/Estado: Nova Xavantina - MT
Curtiu: 77 vezes
Mens.Curtidas: 104 vezes

Dll nao carrega

Mensagempor Itamar M. Lins Jr. » 24 Jun 2020 14:26

Ola!
Tem correção no SVN do ACBr, para o pessoal do Harbour.
[-] Corrigido erro no destroy das classes em [x]Harbour, passando a utilizar dll em Cdecl em vez de StdCall.


Saudações,
Itamar M. Lins Jr.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6950
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 312 vezes
Mens.Curtidas: 507 vezes

Dll nao carrega

Mensagempor JoséQuintas » 24 Jun 2020 15:28

Só fugindo um pouco do assunto.... e pra fazer pensar:

Se dá pra usar DLL do Delphi no Harbour.... o que impediria de usar uma biblioteca gráfica do Delphi no Harbour?
E tem Delphi pra Windows e Linux e outros....
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18151
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

Dll nao carrega

Mensagempor Itamar M. Lins Jr. » 24 Jun 2020 16:00

Ola!
usar uma biblioteca gráfica do Delphi no Harbour

Nada impede, apenas que isso tudo já existe. É só descobrir como andar neste emaranhado de informações.
Lazarus usa GTK, a Hwgui também. Tem GTK para Windows ? tem, o GTK é nativo em qual plataforma ? reposta Linux...
O problema é: Qual é o tamanho da comunidade que vc tem na sua linguagem para te guiar ?
E o Harbour com cada vez menos pessoas...

Ps. A propósito consegui criar a LIB do ACBr, aqui para 32bits... ainda estudando e aprendendo...(Jonatan Gaivota)

Saudações,
Itamar M. Lins Jr.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6950
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 312 vezes
Mens.Curtidas: 507 vezes

Dll nao carrega

Mensagempor MSDN » 24 Jun 2020 16:13

Vídeo mostrando como instalar ACBr no Lazarus, é do canal InfoCotidiano do Daniel, o cara é muito gente boa, ajuda muito o pessoal e tem muitos vídeos bacanas ensinando Lazarus, Linux, Delphi, SQL, etc, vale muito a pena se inscrever no canal dele !

MSDN
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 741
Data de registro: 28 Nov 2003 14:55
Cidade/Estado: CWB
Curtiu: 178 vezes
Mens.Curtidas: 123 vezes

Dll nao carrega

Mensagempor Itamar M. Lins Jr. » 24 Jun 2020 16:50

Ola!
Pois é, assisti esse e até um lá do forum do ACBr, um com Lazarus versão velha... tem que buscar a informação.
Vc tinha postado na outra sessão, assisti e outras buscas acessando foruns, pesquisando se tem a informação blz. Se não achar pelo menos não fico pensando que não fiz a minha parte.

Saudações,
Itamar M. Lins Jr.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6950
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 312 vezes
Mens.Curtidas: 507 vezes

Dll nao carrega

Mensagempor NiltonGM » 24 Jun 2020 18:46

Zeh, só para deixar registrado, as funções DllLoad(), DllCall() e DllUnload() existem sim e estão na lib hbxpp (libhbxpp.a), é só colocar essa lib para compilar. De qualquer forma achei melhor manter as funções hb_libLoad(), hb_DynCall() e hb_LibFree() respectivamente, essas estão funcionando perfeitamente.
rubens escreveu:DynCall() mas não carregou a lib. Provavelmente al

Rubens, no teste que fiz, eu inclui estas:
#include "simpleio.ch"
#include "hmg.ch"
#include 'error.ch'
#include "hbdyn.ch"
Verifica se vc não esqueceu da hbdyn.ch
Depois vc em q carregar a dll:
hDll := hb_libLoad(ACBrLIB)

Aí vc pode usar as funções da DLL:
h := hb_DynCall({"CTE_Inicializar", hDll, HB_DYN_CALLCONV_STDCALL}, "", "")

   lenBuffer := 256
   buffer := Space(lenBuffer)
   hb_DynCall({"CTE_UltimoRetorno", @buffer, @lenBuffer})
   if (lenBuffer > 256)
      buffer := Space(lenBuffer)
      hb_DynCall({"CTE_UltimoRetorno", @buffer, @lenBuffer})
   endif
   oError := ErrorNew()
   oError:Severity := ES_ERROR
   oError:Description := hb_UTF8ToStr(buffer)
   ThRow(oError)

Abraços.
Nilton Medeiros
nilton@sistrom.com.br
Avatar de usuário

NiltonGM
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 393
Data de registro: 05 Jun 2014 23:47
Cidade/Estado: Caieiras/SP
Curtiu: 249 vezes
Mens.Curtidas: 25 vezes

Dll nao carrega

Mensagempor Itamar M. Lins Jr. » 24 Jun 2020 22:30

Ola!
Justiça seja feita.
O pessoal só porque paga o SAC do ACBr, descasca lá...
Li uns posts de uma pessoa do VB, que não acertou usar a DLL, analiso a paciência do pessoal ensinando.
A mesma discussão que já ocorreu aqui, pq a pessoa acha que não é erro dela, pq acredita que o CPU dela é exclusivo.
Pq não seguiu o roteiro a risca e obteve outro resultado, quer desmotivar toda uma equipe.

Imagine quando não tem SAC é por questões de ajudar pura e simples, como é o caso desse forum.

Saudações,
Itamar M. Lins Jr.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6950
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 312 vezes
Mens.Curtidas: 507 vezes

Dll nao carrega

Mensagempor Itamar M. Lins Jr. » 25 Jun 2020 12:53

Ola!
Explicando:
Essas são funções de compatibilidade com o xBase++ que tem na pasta contrib do Harbour
as funções DllLoad(), DllCall() e DllUnload() existem sim e estão na lib hbxpp (libhbxpp.a)

Se olhar no fonte da pasta contrib do \contrib\hbxpp\dllx.c
/*
* Dynamic library handling functions (Xbase++ compatible)
*
...etc
/* NOTE: In Harbour this function will return an in-memory object, not a string.
         2nd and 3rd parameters are not supported in Harbour. */
HB_FUNC_TRANSLATE( DLLLOAD, HB_LIBLOAD )
HB_FUNC_TRANSLATE( DLLUNLOAD, HB_LIBFREE )

/* NOTE: Function ordinals are not supported in 3rd parameter. */

HB_FUNC( DLLCALL )
{
   PHB_ITEM pLibrary       = hb_param( 1, HB_IT_ANY );
   PHB_ITEM pLibraryHandle = NULL;
   HB_BOOL  bFreeLibrary   = HB_FALSE;

   if( pLibrary )
   {
      if( HB_IS_STRING( pLibrary ) )
      {
         pLibraryHandle = hb_libLoad( pLibrary, NULL );
...etc

Vai ver que na realidade elas chamam hb_libLoad(), hb_DynCall() e hb_LibFree().
Não sei pq usaram essa de compatibilidade com o xBase++
Quer dizer se algum guru do Harbour corrigir a hb_libLoad, vá perder lá na contrib xBase++ ou recompilar etc...

Saudações,
Itamar M. Lins Jr.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6950
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 312 vezes
Mens.Curtidas: 507 vezes

Dll nao carrega

Mensagempor NiltonGM » 29 Jun 2020 15:53

Aproveitando para dar uma notícia para quem está com dificuldade de compilar o Lazarus para compilar a ACBrLib, assista estes vídeos:
Windows: https://www.youtube.com/watch?v=GSZOCmXHP4A&feature=emb_logo
Linux: https://www.youtube.com/watch?time_continue=1&v=QTEUNrY7OXA&feature=emb_logo
Nilton Medeiros
nilton@sistrom.com.br
Avatar de usuário

NiltonGM
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 393
Data de registro: 05 Jun 2014 23:47
Cidade/Estado: Caieiras/SP
Curtiu: 249 vezes
Mens.Curtidas: 25 vezes

Dll nao carrega

Mensagempor oribeiro » 26 Ago 2020 14:53

Pessoal,

Fiz um procedimento simples aqui com xHarbour mas não estou tendo nenhuma resposta.

nfe:=ACBrNFe():New()
? nfe:StatusServico()

Estou usando a classe ACBrLib.Prg

#include "FiveWin.ch"

#define DLL_CDECL   0x08
#define DLL_STDCALL 0x20
#define DLL_SYSTEM  0x04
#define STR_LEN     256

#define ACBrLIB     'ACBrNFe32.dll'

CREATE CLASS ACBrNFe

HIDDEN:
    VAR hHandle

    METHOD CheckResult(hResult)
    METHOD ProcessResult(buffer, bufferLen)

VISIBLE:
    METHOD New(eArqConfig, eChaveCrypt) CONSTRUCTOR
    DESTRUCTOR Destroy

    METHOD Nome
    METHOD Versao

    METHOD ConfigLer(eArqConfig)
    METHOD ConfigGravar(eArqConfig)
    METHOD ConfigLerValor(eSessao, eChave)
    METHOD ConfigGravarValor(eSessao, eChave, eValor)

    METHOD CarregarXML(eArquivoOuXml)
    METHOD CarregarINI(eArquivoOuIni)
    METHOD ObterXml(AIndex)
    METHOD GravarXml(AIndex, eNomeArquivo, ePathArquivo)
    METHOD ObterIni(AIndex)
    METHOD GravarIni(AIndex, eNomeArquivo, ePathArquivo)
    METHOD CarregarEventoXML(eArquivoOuXml)
    METHOD CarregarEventoINI(eArquivoOuIni)
    METHOD LimparLista()
    METHOD LimparListaEventos()

    METHOD Assinar()
    METHOD Validar()
    METHOD ValidarRegrasdeNegocios()
    METHOD VerificarAssinatura()
    METHOD GerarChave(ACodigoUF, ACodigoNumerico, AModelo, ASerie, ANumero, ATpEmi, AEmissao, ACNPJCPF)
    METHOD ObterCertificados()
    METHOD GetPath(tipo)
    METHOD GetPathEvento(aCodEvento)

    METHOD StatusServico()
    METHOD Consultar(eChaveOuNFe, AExtrairEventos)
    METHOD Inutilizar(ACNPJ, AJustificativa, Ano, Modelo, Serie, NumeroInicial, NumeroFinal)
    METHOD Enviar(ALote, Imprimir, Sincrono, Zipado)
    METHOD ConsultarRecibo(ARecibo)
    METHOD Cancelar(eChave, eJustificativa, eCNPJ, ALote)
    METHOD EnviarEvento(ALote)

    METHOD DistribuicaoDFePorUltNSU(acUFAutor, eCNPJCPF, eultNSU)
    METHOD DistribuicaoDFePorNSU(acUFAutor, eCNPJCPF, eNSU)
    METHOD DistribuicaoDFePorChave(acUFAutor, eCNPJCPF, echNFe)

    METHOD EnviarEmail(ePara, eChaveNFe, aEnviaPDF, eAssunto, eMensagem, eCc, eAnexos)
    METHOD EnviarEmailEvento(ePara, eChaveEvento, eChaveNFe, aEnviaPDF, eAssunto, eMensagem, eCc, eAnexos)

    METHOD Imprimir(cImpressora, nNumCopias, cProtocolo, bMostrarPreview, cMarcaDagua, bViaConsumidor, bSimplificado)
    METHOD ImprimirPDF()
    METHOD ImprimirEvento(eArquivoXmlNFe, eArquivoXmlEvento)
    METHOD ImprimirEventoPDF(eArquivoXmlNFe, eArquivoXmlEvento)
    METHOD ImprimirInutilizacao(eArquivoXml)
    METHOD ImprimirInutilizacaoPDF(eArquivoXml)

END CLASS

METHOD New(eArqConfig, eChaveCrypt) CLASS ACBrNFe
    local hResult, buffer, bufferLen, oErr

    eArqConfig :=if(eArqConfig = nil, '', eArqConfig)
    eChaveCrypt:=if(eChaveCrypt = nil, '', eChaveCrypt)

    ::hHandle := DllLoad(ACBrLIB)
    if EMPTY(::hHandle) // Eric.Developer: xHarbour retorna 0x00000000
        oErr := ErrorNew()
        oErr:Severity := 2 // ES_ERROR
        oErr:Description := "Erro a carregar a dll [" + ACBrLIB + "]"
//      Throw(oErr)
    endif
    hResult := DllCall(::hHandle, DLL_STDCALL, "NFE_Inicializar", hb_StrToUTF8(eArqConfig), hb_StrToUTF8(eChaveCrypt))
    ::CheckResult(hResult)
    RETURN Self

PROCEDURE Destroy CLASS ACBrNFe
    DllCall(::hHandle, DLL_STDCALL, "NFE_Finalizar")
    DllUnload(::hHandle)
    RETURN

METHOD CheckResult(hResult) CLASS ACBrNFe
    local buffer, bufferLen, oErr
    if hResult >= 0
       RETURN nil
    endif

    bufferLen := STR_LEN
    buffer := Space(bufferLen)

    DllCall(::hHandle, DLL_STDCALL, "NFE_UltimoRetorno", @buffer, @bufferLen)
    if bufferLen > STR_LEN
        buffer := Space(bufferLen)
        DllCall(::hHandle, DLL_STDCALL, "NFE_UltimoRetorno", @buffer, @bufferLen)
    endif

    oErr := ErrorNew()
    oErr:Severity := 2 // ES_ERROR
    oErr:Description := hb_UTF8ToStr(buffer)
//  Throw(oErr)
    RETURN nil

METHOD ProcessResult(buffer, bufferLen) CLASS ACBrNFe
    if bufferLen > STR_LEN
        buffer := Space(bufferLen)
        DllCall(::hHandle, DLL_STDCALL, "NFE_UltimoRetorno", @buffer, @bufferLen)
    endif
    RETURN buffer

METHOD Nome CLASS ACBrNFe
    local hResult, buffer, bufferLen
    bufferLen := STR_LEN
    buffer := Space(bufferLen)
    hResult := DllCall(::hHandle, DLL_STDCALL, "NFE_Nome", @buffer, @bufferLen)
    ::CheckResult(hResult)
    RETURN ::ProcessResult(buffer, bufferLen)

METHOD Versao CLASS ACBrNFe
    local hResult, buffer, bufferLen
    bufferLen := STR_LEN
    buffer := Space(bufferLen)
    hResult := DllCall(::hHandle, DLL_STDCALL, "NFE_Versao", @buffer, @bufferLen)
    ::CheckResult(hResult)
    RETURN ::ProcessResult(buffer, bufferLen)

METHOD ConfigLer(eArqConfig) CLASS ACBrNFe
    local hResult
    hResult := DllCall(::hHandle, DLL_STDCALL, "NFE_ConfigLer", hb_StrToUTF8(eArqConfig))
    ::CheckResult(hResult)
    RETURN nil

METHOD ConfigGravar(eArqConfig) CLASS ACBrNFe
        local hResult
        hResult := DllCall(::hHandle, DLL_STDCALL, "NFE_ConfigGravar", hb_StrToUTF8(eArqConfig))
        ::CheckResult(hResult)
        RETURN nil

METHOD ConfigLerValor(eSessao, eChave) CLASS ACBrNFe
    local hResult, buffer, bufferLen
    bufferLen := STR_LEN
    buffer := Space(bufferLen)
    hResult := DllCall(::hHandle, DLL_STDCALL, "NFE_ConfigLerValor", hb_StrToUTF8(eSessao), hb_StrToUTF8(eChave), @buffer, @bufferLen)
    ::CheckResult(hResult)
    RETURN ::ProcessResult(buffer, bufferLen)

METHOD ConfigGravarValor(eSessao, eChave, eValor) CLASS ACBrNFe
    local hResult
    hResult := DllCall(::hHandle, DLL_STDCALL, "NFE_ConfigGravarValor", hb_StrToUTF8(eSessao), hb_StrToUTF8(eChave), hb_StrToUTF8(eValor))
    ::CheckResult(hResult)
    RETURN nil

METHOD CarregarXML(eArquivoOuXml) CLASS ACBrNFe
    local hResult
    hResult := DllCall(::hHandle, DLL_STDCALL, "NFE_CarregarXML", hb_StrToUTF8(eArquivoOuXml))
    ::CheckResult(hResult)
    RETURN nil

METHOD CarregarINI(eArquivoOuIni) CLASS ACBrNFe
    local hResult
    hResult := DllCall(::hHandle, DLL_STDCALL, "NFE_CarregarINI", hb_StrToUTF8(eArquivoOuIni))
    ::CheckResult(hResult)
    RETURN nil

METHOD ObterXml(AIndex) CLASS ACBrNFe
    local hResult, buffer, bufferLen
    bufferLen := STR_LEN
    buffer := Space(bufferLen)
    hResult := DllCall(::hHandle, DLL_STDCALL, "NFE_ObterXml", AIndex, @buffer, @bufferLen)
    ::CheckResult(hResult)
    RETURN ::ProcessResult(buffer, bufferLen)

METHOD GravarXml(AIndex, eNomeArquivo, ePathArquivo) CLASS ACBrNFe
    local hResult
    hResult := DllCall(::hHandle, DLL_STDCALL, "NFE_GravarXml", AIndex, hb_StrToUTF8(eNomeArquivo), hb_StrToUTF8(ePathArquivo))
    ::CheckResult(hResult)
    RETURN nil

METHOD ObterIni(AIndex) CLASS ACBrNFe
    local hResult, buffer, bufferLen
    bufferLen := STR_LEN
    buffer := Space(bufferLen)
    hResult := DllCall(::hHandle, DLL_STDCALL, "NFE_ObterIni", AIndex, @buffer, @bufferLen)
    ::CheckResult(hResult)
    RETURN ::ProcessResult(buffer, bufferLen)

METHOD GravarIni(AIndex, eNomeArquivo, ePathArquivo) CLASS ACBrNFe
    local hResult
    hResult := DllCall(::hHandle, DLL_STDCALL, "NFE_GravarIni", AIndex, hb_StrToUTF8(eNomeArquivo), hb_StrToUTF8(ePathArquivo))
    ::CheckResult(hResult)
    RETURN nil

METHOD CarregarEventoXML(eArquivoOuXml) CLASS ACBrNFe
    local hResult
    hResult := DllCall(::hHandle, DLL_STDCALL, "NFE_CarregarEventoXML", hb_StrToUTF8(eArquivoOuXml))
    ::CheckResult(hResult)
    RETURN nil

METHOD CarregarEventoINI(eArquivoOuIni) CLASS ACBrNFe
    local hResult
    hResult := DllCall(::hHandle, DLL_STDCALL, "NFE_CarregarEventoINI", hb_StrToUTF8(eArquivoOuIni))
    ::CheckResult(hResult)
    RETURN nil

METHOD LimparLista() CLASS ACBrNFe
    local hResult
    hResult := DllCall(::hHandle, DLL_STDCALL, "NFE_LimparLista")
    ::CheckResult(hResult)
    RETURN nil

METHOD LimparListaEventos() CLASS ACBrNFe
    local hResult
    hResult := DllCall(::hHandle, DLL_STDCALL, "NFE_LimparListaEventos")
    ::CheckResult(hResult)
    RETURN nil

METHOD Assinar() CLASS ACBrNFe
    local hResult
    hResult := DllCall(::hHandle, DLL_STDCALL, "NFE_Assinar")
    ::CheckResult(hResult)
    RETURN nil

METHOD Validar() CLASS ACBrNFe
    local hResult
    hResult := DllCall(::hHandle, DLL_STDCALL, "NFE_Validar")
    ::CheckResult(hResult)
    RETURN nil

METHOD ValidarRegrasdeNegocios() CLASS ACBrNFe
    local hResult
    hResult := DllCall(::hHandle, DLL_STDCALL, "NFE_ValidarRegrasdeNegocios")
    ::CheckResult(hResult)
    RETURN nil

METHOD VerificarAssinatura() CLASS ACBrNFe
    local hResult
    hResult := DllCall(::hHandle, DLL_STDCALL, "NFE_VerificarAssinatura")
    ::CheckResult(hResult)
    RETURN nil

METHOD GerarChave(ACodigoUF, ACodigoNumerico, AModelo, ASerie, ANumero, ATpEmi, AEmissao, ACNPJCPF) CLASS ACBrNFe
    local hResult, buffer, bufferLen
    bufferLen := STR_LEN
    buffer := Space(bufferLen)
    hResult := DllCall(::hHandle, DLL_STDCALL, "NFE_GerarChave", ACodigoUF, ACodigoNumerico, AModelo, ASerie, ANumero, ATpEmi, AEmissao, ACNPJCPF, @buffer, @bufferLen)
    ::CheckResult(hResult)
    RETURN ::ProcessResult(buffer, bufferLen)

METHOD ObterCertificados() CLASS ACBrNFe
    local hResult, buffer, bufferLen
    bufferLen := STR_LEN
    buffer := Space(bufferLen)
    hResult := DllCall(::hHandle, DLL_STDCALL, "NFE_ObterCertificados", @buffer, @bufferLen)
    ::CheckResult(hResult)
    RETURN ::ProcessResult(buffer, bufferLen)

METHOD GetPath(tipo)
    local hResult, buffer, bufferLen
    bufferLen := STR_LEN
    buffer := Space(bufferLen)
    hResult := DllCall(::hHandle, DLL_STDCALL, "NFE_GetPath", tipo, @buffer, @bufferLen)
    ::CheckResult(hResult)
    RETURN ::ProcessResult(buffer, bufferLen)

METHOD GetPathEvento(aCodEvento)
    local hResult, buffer, bufferLen
    bufferLen := STR_LEN
    buffer := Space(bufferLen)
    hResult := DllCall(::hHandle, DLL_STDCALL, "NFE_GetPathEvento", hb_StrToUTF8(aCodEvento), @buffer, @bufferLen)
    ::CheckResult(hResult)
    RETURN ::ProcessResult(buffer, bufferLen)

METHOD StatusServico() CLASS ACBrNFe
    local hResult, buffer, bufferLen
    bufferLen := STR_LEN
    buffer := Space(bufferLen)
    hResult := DllCall(::hHandle, DLL_STDCALL, "NFE_StatusServico", @buffer, @bufferLen)
    ::CheckResult(hResult)
    RETURN ::ProcessResult(buffer, bufferLen)

METHOD Consultar(eChaveOuNFe, AExtrairEventos) CLASS ACBrNFe
    local hResult, buffer, bufferLen
    bufferLen := STR_LEN
    buffer := Space(bufferLen)
    hResult := DllCall(::hHandle, DLL_STDCALL, "NFE_Consultar", hb_StrToUTF8(eChaveOuNFe), AExtrairEventos, @buffer, @bufferLen)
    ::CheckResult(hResult)
    RETURN ::ProcessResult(buffer, bufferLen)

METHOD Inutilizar(ACNPJ, AJustificativa, Ano, Modelo, Serie, NumeroInicial, NumeroFinal) CLASS ACBrNFe
    local hResult, buffer, bufferLen
    bufferLen := STR_LEN
    buffer := Space(bufferLen)
    hResult := DllCall(::hHandle, DLL_STDCALL, "NFE_Inutilizar", hb_StrToUTF8(ACNPJ), hb_StrToUTF8(AJustificativa), Ano, Modelo, Serie, NumeroInicial, NumeroFinal, @buffer, @bufferLen)
    ::CheckResult(hResult)
    RETURN ::ProcessResult(buffer, bufferLen)

METHOD Enviar(ALote, Imprimir, Sincrono, Zipado) CLASS ACBrNFe
    local hResult, buffer, bufferLen
    bufferLen := STR_LEN
    buffer := Space(bufferLen)
    hResult := DllCall(::hHandle, DLL_STDCALL, "NFE_Enviar", ALote, Imprimir, Sincrono, Zipado, @buffer, @bufferLen)
    ::CheckResult(hResult)
    RETURN ::ProcessResult(buffer, bufferLen)

METHOD ConsultarRecibo(ARecibo) CLASS ACBrNFe
    local hResult, buffer, bufferLen
    bufferLen := STR_LEN
    buffer := Space(bufferLen)
    hResult := DllCall(::hHandle, DLL_STDCALL, "NFE_ConsultarRecibo", hb_StrToUTF8(ARecibo), @buffer, @bufferLen)
    ::CheckResult(hResult)
    RETURN ::ProcessResult(buffer, bufferLen)

METHOD Cancelar(eChave, eJustificativa, eCNPJ, ALote) CLASS ACBrNFe
    local hResult, buffer, bufferLen
    bufferLen := STR_LEN
    buffer := Space(bufferLen)
    hResult := DllCall(::hHandle, DLL_STDCALL, "NFE_Cancelar", hb_StrToUTF8(eChave), hb_StrToUTF8(eJustificativa), hb_StrToUTF8(eCNPJ), ALote, @buffer, @bufferLen)
    ::CheckResult(hResult)
    RETURN ::ProcessResult(buffer, bufferLen)

METHOD EnviarEvento(ALote) CLASS ACBrNFe
    local hResult, buffer, bufferLen
    bufferLen := STR_LEN
    buffer := Space(bufferLen)
    hResult := DllCall(::hHandle, DLL_STDCALL, "NFE_EnviarEvento", ALote, @buffer, @bufferLen)
    ::CheckResult(hResult)
    RETURN ::ProcessResult(buffer, bufferLen)

METHOD DistribuicaoDFePorUltNSU(acUFAutor, eCNPJCPF, eultNSU) CLASS ACBrNFe
    local hResult, buffer, bufferLen
    bufferLen := STR_LEN
    buffer := Space(bufferLen)
    hResult := DllCall(::hHandle, DLL_STDCALL, "NFE_DistribuicaoDFePorUltNSU", acUFAutor, hb_StrToUTF8(eCNPJCPF), hb_StrToUTF8(eultNSU), @buffer, @bufferLen)
    ::CheckResult(hResult)
    RETURN ::ProcessResult(buffer, bufferLen)

METHOD DistribuicaoDFePorNSU(acUFAutor, eCNPJCPF, eNSU) CLASS ACBrNFe
    local hResult, buffer, bufferLen
    bufferLen := STR_LEN
    buffer := Space(bufferLen)
    hResult := DllCall(::hHandle, DLL_STDCALL, "NFE_DistribuicaoDFePorNSU", acUFAutor, hb_StrToUTF8(eCNPJCPF), hb_StrToUTF8(eNSU), @buffer, @bufferLen)
    ::CheckResult(hResult)
    RETURN ::ProcessResult(buffer, bufferLen)

METHOD DistribuicaoDFePorChave(acUFAutor, eCNPJCPF, echNFe) CLASS ACBrNFe
    local hResult, buffer, bufferLen
    bufferLen := STR_LEN
    buffer := Space(bufferLen)
    hResult := DllCall(::hHandle, DLL_STDCALL, "NFE_DistribuicaoDFePorChave", acUFAutor, hb_StrToUTF8(eCNPJCPF), hb_StrToUTF8(echNFe), @buffer, @bufferLen)
    ::CheckResult(hResult)
    RETURN ::ProcessResult(buffer, bufferLen)

METHOD EnviarEmail(ePara, eChaveNFe, aEnviaPDF, eAssunto, eMensagem, eCc, eAnexos) CLASS ACBrNFe
    local hResult
    hResult := DllCall(::hHandle, DLL_STDCALL, "NFE_EnviarEmail", hb_StrToUTF8(ePara), hb_StrToUTF8(eChaveNFe), aEnviaPDF, hb_StrToUTF8(eAssunto), hb_StrToUTF8(eMensagem), hb_StrToUTF8(eCc), hb_StrToUTF8(eAnexos))
    ::CheckResult(hResult)
    RETURN nil

METHOD EnviarEmailEvento(ePara, eChaveEvento, eChaveNFe, aEnviaPDF, eAssunto, eMensagem, eCc, eAnexos) CLASS ACBrNFe
    local hResult
    hResult := DllCall(::hHandle, DLL_STDCALL, "NFE_EnviarEmailEvento", hb_StrToUTF8(ePara), hb_StrToUTF8(eChaveEvento), hb_StrToUTF8(eChaveNFe), aEnviaPDF, hb_StrToUTF8(eAssunto), hb_StrToUTF8(eMensagem), hb_StrToUTF8(eCc), hb_StrToUTF8(eAnexos))
    ::CheckResult(hResult)
    RETURN nil

METHOD Imprimir(cImpressora, nNumCopias, cProtocolo, bMostrarPreview, cMarcaDagua, bViaConsumidor, bSimplificado) CLASS ACBrNFe
    local hResult
    hResult := DllCall(::hHandle, DLL_STDCALL, "NFE_Imprimir", hb_StrToUTF8(cImpressora), nNumCopias, hb_StrToUTF8(cProtocolo), hb_StrToUTF8(bMostrarPreview), hb_StrToUTF8(cMarcaDagua), hb_StrToUTF8(bViaConsumidor), hb_StrToUTF8(bSimplificado))
    ::CheckResult(hResult)
    RETURN nil

METHOD ImprimirPDF() CLASS ACBrNFe
    local hResult
    hResult := DllCall(::hHandle, DLL_STDCALL, "NFE_ImprimirPDF")
    ::CheckResult(hResult)
    RETURN nil

METHOD ImprimirEvento(eArquivoXmlNFe, eArquivoXmlEvento) CLASS ACBrNFe
    local hResult
    hResult := DllCall(::hHandle, DLL_STDCALL, "NFE_ImprimirEvento", hb_StrToUTF8(eArquivoXmlNFe), hb_StrToUTF8(eArquivoXmlEvento))
    ::CheckResult(hResult)
    RETURN nil

METHOD ImprimirEventoPDF(eArquivoXmlNFe, eArquivoXmlEvento) CLASS ACBrNFe
    local hResult
    hResult := DllCall(::hHandle, DLL_STDCALL, "NFE_ImprimirEventoPDF", hb_StrToUTF8(eArquivoXmlNFe), hb_StrToUTF8(eArquivoXmlEvento))
    ::CheckResult(hResult)
    RETURN nil

METHOD ImprimirInutilizacao(eArquivoXml) CLASS ACBrNFe
    local hResult
    hResult := DllCall(::hHandle, DLL_STDCALL, "NFE_ImprimirInutilizacao", hb_StrToUTF8(eArquivoXml))
    ::CheckResult(hResult)
    RETURN nil

METHOD ImprimirInutilizacaoPDF(eArquivoXml) CLASS ACBrNFe
    local hResult
    hResult := DllCall(::hHandle, DLL_STDCALL, "NFE_ImprimirInutilizacaoPDF", hb_StrToUTF8(eArquivoXml))
    ::CheckResult(hResult)
    RETURN nil

Oscar Ribeiro
xHarbour+Fwh+WorkShop
Avatar de usuário

oribeiro
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 30
Data de registro: 15 Fev 2013 06:35
Cidade/Estado: Itu/SP
Curtiu: 0 vez
Mens.Curtidas: 1 vez

Anterior Próximo



Retornar para Harbour

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 6 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro