Ir para conteúdo
  • Cadastre-se

dev botao

Erro na Reinf_CriarEventoReinf - ACBrLib


Ver Solução Respondido por Precisa Informatica,
  • Este tópico foi criado há 229 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

  • Membros Pro
Postado

Boa tarde!

Estou com um problema ao chamar via VB6 a função Reinf_CriarEventoReinf da ACBrReinf32.DLL  - Versão 1.0.0.25.

Ao passar na linha(ver img1 no anexo) que invoca a função  da DLL me dá o retorno: "49 - Bad DLL calling convention".

Eu já verifiquei e estou usando a DLL do tipo StdCall, a indicada para VB6.

Só que apesar do erro,  notei que o ACBrLib funciona conforme o esperado, pois retorna o código 0 (ver img2), bem como cria o XML(img3) do evento na pasta que foi previamente indicada.

Porém fico "travado" nessa linha do código da chamada da função com esse erro e não consigo avançar...

Olhando o LOG no nível 4(ver img4) também não me aponta nenhum erro.

Alguém pode, por favor, verificar se tem algum problema na chamada desse método da DLL?

Segue prints em anexo.

Obrigado!

img1.JPG

img2.JPG

img3.JPG

img4.JPG

  • Membros Pro
Postado
18 horas atrás, Renato Rubinho disse:

Boa noite, 

Pesquise em todas as unidades do computador e confirme se não existe uma outra cópia da ACBrReinf32.DLL que possa estar influenciando. 

 

 

Boa tarde!

Eu fiz isso de retirar a DLL de todos os lugares, de modo que quando fui usar o método de inicializar já me deu "File note Found: ACBrReinf32.DLL"(ver anexo).

Depois disso coloquei a DLL somente na C:\Windows\SysWOW64, daí consegui inicializar, mas dá então esse retorno: "49 - Bad DLL calling convention"

erro.JPG

  • Consultores
Postado

Boa tarde,

Seguem considerações:

31 minutos atrás, Precisa Informatica disse:

Depois disso coloquei a DLL somente na C:\Windows\SysWOW64

1. Evite utilizar as dlls na SysWOW64 ou System32, apague também esta que você copiou.

image.png

2. Copie novamente a dll, atente-se a pegar da pasta StdCall, cole na pasta onde está o seu exe compilado ao invés de colar na SysWOW64.

 

image.png

3. Se você estiver utilizando chamadas Single thread, cuidado para NÃO pegar a Lb da pasta MT

 

  • Membros Pro
Postado
14 minutos atrás, Renato Rubinho disse:

Boa tarde,

Seguem considerações:

1. Evite utilizar as dlls na SysWOW64 ou System32, apague também esta que você copiou.

image.png

2. Copie novamente a dll, atente-se a pegar da pasta StdCall, cole na pasta onde está o seu exe compilado ao invés de colar na SysWOW64.

 

image.png

3. Se você estiver utilizando chamadas Single thread, cuidado para NÃO pegar a Lb da pasta MT

 

 

Ok. Eu apaguei lá da SysWOW64 e como estou com o projeto no estágio de desenvolvimento, coloquei na pasta do executável da IDE do VB6.

Então, ocorreu a mesma coisa que antes: consegui inicializar a DLL, porém, deu o mesmo erro que já tinha dado antes

Por hora eu adicionei um tratamento de erro na minha função para ignorar esse erro e conseguir prosseguir...

image.thumb.png.70afb196c18042eacc4d05d110cd0f44.png

  • Consultores
Postado

Olá,

Montamos um ambiente de testes e não apresentou o problema utilizando a lib ST StdCall.

Este erro ocorreu quando tentamos utilizar a versão MT StdCall ou qualquer outra cdecl.

Confirme como fez a declaração do import da dll, se foi conforme abaixo.

Private Declare Function Reinf_ConsultarReinf 
                Lib "ACBrReinf32.dll" (ByVal eProtocolo As String, 
 ByVal buffer As String, 
 ByRef bufferLen As Long) As Long

 

  • Membros Pro
  • Solution
Postado
22 horas atrás, Renato Rubinho disse:

Olá,

Montamos um ambiente de testes e não apresentou o problema utilizando a lib ST StdCall.

Este erro ocorreu quando tentamos utilizar a versão MT StdCall ou qualquer outra cdecl.

Confirme como fez a declaração do import da dll, se foi conforme abaixo.

Private Declare Function Reinf_ConsultarReinf 
                Lib "ACBrReinf32.dll" (ByVal eProtocolo As String, 
 ByVal buffer As String, 
 ByRef bufferLen As Long) As Long

 

Boa tarde!

Descobri o que estava causando o problema aqui.

Estava passando na chamada do método de criar evento dois parâmetros indevidamente.

Creio que tenha sido efeito de um Replace que fiz no código e afetou coisas que não deveriam...

Estava assim:

Reinf_CriarEventoReinf(eArqIni, buffer, bufferLen)

E o correto assim:

Reinf_CriarEventoReinf(eArqIni)

Desculpe o transtorno!

Muito obrigado.

  • Curtir 2
  • Este tópico foi criado há 229 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.
Visitante
Este tópico está agora fechado para novas respostas
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.