ACBrLib
Moderador: Moderadores
-
pauloa1
- Usuário Nível 3

- Mensagens: 227
- Registrado em: 25 Jun 2008 14:57
- Localização: Augusto Pestana-RS
ACBrLib
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
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
- JoséQuintas
- Administrador

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

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
ACBrLib
Usando o que postaram antes:
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".
Código: Selecionar todos
bufferLen := STR_LEN
buffer := Space(bufferLen)
oErr := DllCall(oDll, DLL_STDCALL, "NFE_UltimoRetorno", @buffer, @bufferLen)
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".
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/
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/
- oribeiro
- Usuário Nível 1

- Mensagens: 30
- Registrado em: 15 Fev 2013 07:35
- Localização: Itu/SP
- Contato:
ACBrLib
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.
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.
Oscar Ribeiro
xHarbour+Fwh+WorkShop
xHarbour+Fwh+WorkShop
- Itamar M. Lins Jr.
- Administrador

- Mensagens: 7928
- Registrado em: 30 Mai 2007 11:31
- Localização: Ilheus Bahia
- Curtiu: 1 vez
ACBrLib
Olá!
Está usando xHarbour com qual compilador ? BCC 5x ?
Saudações,
Itamar M. Lins Jr.
Já testou com o Harbour usando GCC ?Não consigo imprimir NFe e SAT sem antes sair da aplicação. Isso está me tirando o sono.
Está usando xHarbour com qual compilador ? BCC 5x ?
Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Itamar M. Lins Jr.
- oribeiro
- Usuário Nível 1

- Mensagens: 30
- Registrado em: 15 Fev 2013 07:35
- Localização: Itu/SP
- Contato:
ACBrLib
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
Bcc73
Itamar,
Por favor, tente compilar o exemplo que coloquei num zip anexo acima para ver se imprime NFe e Sat .
Obrigado
Oscar Ribeiro
xHarbour+Fwh+WorkShop
xHarbour+Fwh+WorkShop
- Itamar M. Lins Jr.
- Administrador

- Mensagens: 7928
- Registrado em: 30 Mai 2007 11:31
- Localização: Ilheus Bahia
- Curtiu: 1 vez
ACBrLib
Ola!
Cadê o PRG PURO! sem fivewin, etc... para compilar com qualquer Harbour ?
O ZIP só tem EXE
Saudações,
Itamar M. Lins Jr.
Cadê o PRG PURO! sem fivewin, etc... para compilar com qualquer Harbour ?
O ZIP só tem EXE
Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Itamar M. Lins Jr.
- oribeiro
- Usuário Nível 1

- Mensagens: 30
- Registrado em: 15 Fev 2013 07:35
- Localização: Itu/SP
- Contato:
ACBrLib
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.
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.
- Anexos
-
ACBrTeste.zip- Exe, Prg, DLL e xmls de exemplo
- (6.88 MiB) Baixado 500 vezes
Oscar Ribeiro
xHarbour+Fwh+WorkShop
xHarbour+Fwh+WorkShop