Página 4 de 7
ACBrLib
Enviado: 27 Out 2020 14:58
por pauloa1
Se não for o limpalista()
coloca nesse código:
Onde tem if !Empty(hResult)
bufferLen := STR_LEN
buffer := Space(bufferLen)
oErr := DllCall(oDll, DLL_STDCALL, "NFE_UltimoRetorno", @buffer, @bufferLen)
MsgStop(buffer, "Erro: "+Str(hResult))
endif
coloca
Onde tem if !Empty(hResult)
bufferLen := STR_LEN
If bufferLen > STR_LEN
buffer := Space(bufferLen + 256 )
endif
buffer := Space(bufferLen)
oErr := DllCall(oDll, DLL_STDCALL, "NFE_UltimoRetorno", @buffer, @bufferLen)
MsgStop(buffer, "Erro: "+Str(hResult))
endif
Paulo
ACBrLib
Enviado: 27 Out 2020 16:18
por oribeiro
Paulo,
Obrigado por tentar ajudar.
Tentei com o comando nfe_limparlista e sem ele, mas o resultado é o mesmo.
Alguma outra sugestão?
ACBrLib
Enviado: 28 Out 2020 09:11
por pauloa1
Tentou a segunda opção que passei?
Paulo
ACBrLib
Enviado: 29 Out 2020 13:28
por oribeiro
Tentei. Mas não deu resultado.
Você conseguiu rodar o exemplo que eu enviei anexo?
ACBrLib
Enviado: 29 Out 2020 14:55
por pauloa1
No seu exe anexado abre a danfe normal.
Você carregou o xml antes do comando imprimir?
nfe:LimparLista()
NFE:CarregarXML(xml )
NFE:Imprimir( ,0, ,"True" , , , )
Paulo
ACBrLib
Enviado: 29 Out 2020 15:54
por oribeiro
O meu EXE abre normal, mas você tentou abrir o SAT logo depois da NFE? Ou abrir primeiro o SAT e depois a NFe? Aqui dá erro.
ACBrLib
Enviado: 30 Out 2020 09:17
por pauloa1
Eu não uso SAT.
Paulo
ACBrLib
Enviado: 30 Out 2020 09:55
por oribeiro
Paulo,
Tente executar o meu exemplo e imprimir a NFe e logo depois o SAT, sem sair do programa. Você vai ver o erro.
ACBrLib
Enviado: 30 Out 2020 11:03
por JoséQuintas
Que eu me lembre, no fonte da ACBRDLL pode ser feito em duas etapas.
O que acontece? Precisa caber o resultado na variável.
Quando o resultado não cabe, é chamado novamente, ou como complemento, pra pegar a mensagem maior.
Tipo:
Código: Selecionar todos
buffer := 256
variavel := Space(buffer)
ChamaRotina( @variavel, @buffer )
IF buffer > 256
novavariavel := Space(buffer)
// outra rotina com variavel maior
ENDIF
Variável por referência é pointer, uma posição da memória.
Cada linguagem de programação tem seu próprio estilo de controle disso.
Ao passar a string por referência, está indicando a posição da memória.
A DLL vai gravar a nova string nesse espaço de memória, e se a string for maior, é quando invade posição de memória que não faz parte da variável, causando GPF.
Pra evitar esse erro, é onde o ACBR usou a limitação de tamanho.
Acontece que pode existir conteúdo maior que esse tamanho, então o conteúdo fica incompleto.
O ACBR tem lá no PRG uma segunda chamada, pra quando acontece isso, usando uma string maior pra pegar o resultado completo.
Verifica se na parte que fez colocou essa "chamada de complemento".
Ela usa o tamanho que foi retornado na primeira chamada.
ACBrLib
Enviado: 30 Out 2020 11:22
por JoséQuintas
Usando o que postaram antes:
Código: Selecionar todos
bufferLen := STR_LEN
buffer := Space(bufferLen)
oErr := DllCall(oDll, DLL_STDCALL, "NFE_UltimoRetorno", @buffer, @bufferLen)
Esse bufferlen tem duas funções:
1 - avisar o ACBR sobre o limite de texto que cabe
2 - por referência é para que o ACBR retorne nela qual o tamanho usado/necessário.
Se o tamanho é maior do que o texto, significa que faltou espaço, e é onde entra a segunda chamada.
Outra alternativa seria alterar de Space(256) pra Space(50000), pelo menos vai ter menos exceções.
E sempre usar Substr( variavel, ntamanho ) no resultado, porque o espaço adicional vai conter "lixo".
ACBrLib
Enviado: 30 Out 2020 15:31
por oribeiro
José Quintas,
Se possível, por favor, compile o exemplo que coloquei acima e veja se consegue me ajudar.
Não consigo imprimir NFe e SAT sem antes sair da aplicação. Isso está me tirando o sono.
Obrigado.
ACBrLib
Enviado: 30 Out 2020 18:29
por Itamar M. Lins Jr.
Olá!
Não consigo imprimir NFe e SAT sem antes sair da aplicação. Isso está me tirando o sono.
Já testou com o Harbour usando GCC ?
Está usando xHarbour com qual compilador ? BCC 5x ?
Saudações,
Itamar M. Lins Jr.
ACBrLib
Enviado: 30 Out 2020 19:28
por oribeiro
Uso xHarbour 1.2.3. Build 20180311
Bcc73
Itamar,
Por favor, tente compilar o exemplo que coloquei num zip anexo acima para ver se imprime NFe e Sat .
Obrigado
ACBrLib
Enviado: 31 Out 2020 07:23
por Itamar M. Lins Jr.
Ola!
Cadê o PRG PURO! sem fivewin, etc... para compilar com qualquer Harbour ?
O ZIP só tem EXE
Saudações,
Itamar M. Lins Jr.
ACBrLib
Enviado: 31 Out 2020 14:00
por oribeiro
Itamar,
O Anexo contém o PRG com FiveWin (não sei usar somente o xHarbour).
Contém também as DLL, Acbrlib.ini e dois xmls de exemplo, um de nfe e outro de sat.
Obrigado pelo seu interesse em ajudar.