Em minha aplicação utilizo jna para consultar e executar um método específico de uma dll. Esta funcionando OK em todos os meus clientes, porém em 1 deles esta funcionando, mas o calculo esta retornando valores absurdos, após fazer alguns testes ainda não consegui encontrar onde pode estar o problema. E o pior foi que do meu fonte apontei par ao banco em produção deste cliente e os valores retornaram corretamente. A única diferença que vejo é que o sistema operacional deste cliente esta em inglês ( Windows ) porém as configurações regionais esta toda setada para Brasil.
Oque vocês acham que pode estar ocorrendo este erro de cálculo.
Dá a impressão, pela sua descrição, que o erro de cálculo ocorre dentro dessa DLL. Se você não tiver o fonte dessa DLL fica difícil dizer se é isso mesmo
S
sciuba
Segue fonte de chamada da DLL
/** * Classe interface onde serão declarados os métodos contidos na dll Tenha o * cuidado de lembrar que, diferente do Delphi, Java é case sensitive. */publicinterfaceDLLextendsLibrary{publicStringCalcularMediaParcial(Stringcaminho,StringGUID,intidEmpresa,intidGrupoEmpresa,intidUsuario,intidPeriodoLetivo,intidCurso,intidCiclo,intidSerie,intidFaseCalendario,intidProfessor,intidDisciplina,intidTurma);publicvoidLiberarRecursos();}/** * Método que tentará encontrar a dll. */publicstaticDLLloadAdMediaParcialDLL(){try{//Tenta carregar a DLL em c:\windows\system32return(DLL)Native.loadLibrary("AdMediaParcial.dll",DLL.class);}catch(UnsatisfiedLinkErrore){logger.error("AdMediaParcial.dll Não Encontrada!"+ex);returnnull;}}publicsynchronizedStringexecAdMediaParcialDLL(Stringcaminho,StringGUID,intidEmpresa,intidGrupoEmpresa,intidUsuario,intidPeriodoLetivo,intidCurso,intidCiclo,intidSerie,intidFaseCalendario,intidProfessor,intidDisciplina,intidTurma){Stringretorno="";try{if(consultaDll==null){//System.out.println("[CentralApontamentoNotas] manda carregar a dll");consultaDll=loadAdMediaParcialDLL();}if(consultaDll!=null){//Aqui é que obtenho o retorno do calculo em uma String retorno=consultaDll.CalcularMediaParcial(caminho,GUID,idEmpresa,idGrupoEmpresa,idUsuario,idPeriodoLetivo,idCurso,idCiclo,idSerie,idFaseCalendario,idProfessor,idDisciplina,idTurma);consultaDll.LiberarRecursos();}}catch(Exceptione){//System.out.println("ERRO!");e.printStackTrace();}finally{consultaDll.LiberarRecursos();System.gc();}returnretorno;}
Não manjo de Delphi foi a outra equipe que desenvolveu.
S
sciuba
up
E
entanglement
Que tal perguntar à outra equipe? Equipes em uma empresa devem se falar.
De qualquer maneira, dá a impressão que o código em Delphi original deva ter o mesmo problema quando você vá executá-lo sozinho, sem JNA ou Java ou sei lá o quê, quando for rodar na tal máquina com Windows em inglês mas regional settings em português.
Ou então você está fazendo alguma besteira na hora de converter a string para um resultado numérico
S
sciuba
entanglement:
Que tal perguntar à outra equipe? Equipes em uma empresa devem se falar.
De qualquer maneira, dá a impressão que o código em Delphi original deva ter o mesmo problema quando você vá executá-lo sozinho, sem JNA ou Java ou sei lá o quê, quando for rodar na tal máquina com Windows em inglês mas regional settings em português.
Ou então você está fazendo alguma besteira na hora de converter a string para um resultado numérico :)
entanglement
Obrigado por responder!
Então kra eles fizeram também um exe para testar a execução da DLL e rodou normalmente no servidor do cliente que esta ocorrendo o erro. e como disse com o meu fonte ( Java ) setando o banco para o endereço deles em produção também rodou corretamente nso outros clientes também esta OK somente nesse que esta ocorrendo isso. cheguei a subir um novo deploy a partis do fonte da minha maquina e o erro do calculo continuou!
Esta dificil entender pois não da erro somente calcula errado.
A outra equipe como o exe para teste funciona corretamente ja jogam a culpa par ao Java.
Complicado
E
entanglement
Pois é, você vai ter de reproduzir o ambiente do cara onde o cálculo é feito incorretamente. Não descarto nada, pode ser problema do Delphi mesmo, ou do Java? (eles jogaram o tal programa de teste namáquina que deu problema?
S
sciuba
Exatamente eu mesmo efetuei o teste!
E é oque estou fazendo neste momento subindo uma VM com o mesmo SO do cliente e montar um ambiente idêntico para testar!
Obrigado pela atenção ate o momento entanglement qualquer possível ideia ou sugestão agradeço, o resultado desses testes irei postar aqui.