Membros Pro Precisa Informatica Postado 9 Abril Membros Pro Compartilhar Postado 9 Abril 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! Link para o comentário Compartilhar em outros sites More sharing options...
Consultores Renato Rubinho Postado 9 Abril Consultores Compartilhar Postado 9 Abril 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. Link para o comentário Compartilhar em outros sites More sharing options...
Membros Pro Precisa Informatica Postado 10 Abril Autor Membros Pro Compartilhar Postado 10 Abril 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". Link para o comentário Compartilhar em outros sites More sharing options...
Consultores Renato Rubinho Postado 10 Abril Consultores Compartilhar Postado 10 Abril 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. 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. 3. Se você estiver utilizando chamadas Single thread, cuidado para NÃO pegar a Lb da pasta MT Link para o comentário Compartilhar em outros sites More sharing options...
Membros Pro Precisa Informatica Postado 10 Abril Autor Membros Pro Compartilhar Postado 10 Abril 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. 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. 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... Link para o comentário Compartilhar em outros sites More sharing options...
Consultores Renato Rubinho Postado 10 Abril Consultores Compartilhar Postado 10 Abril 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 Link para o comentário Compartilhar em outros sites More sharing options...
Membros Pro Solution Precisa Informatica Postado 11 Abril Autor Membros Pro Solution Compartilhar Postado 11 Abril 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. 2 Link para o comentário Compartilhar em outros sites More sharing options...
Consultores Renato Rubinho Postado 11 Abril Consultores Compartilhar Postado 11 Abril Obrigado por reportar. Fechando. Para novas dúvidas, criar um novo tópico. Link para o comentário Compartilhar em outros sites More sharing options...
Recommended Posts