JNA - Runtime error 217

0 respostas
A

Possuimos uma aplicação web que precisa consultar uma DLL desenvolvida pela minha empresa e compilada em Delphi 2006.

A consulta à DDL está sendo feita via JNA. Nós conseguimos obter o retorno da DLL (uma sequência de strings encadeados), porém logo em seguida aparece a mensagem de erro da JVM - ‘Runtime error 217 at 01823ACF’ e o servidor sai do ar.

Aparentemente é como se ficasse alocado na memória e perdesse sua referência. A aplicação esta sendo executada no Glassfish 3.0.1, apesar de que criei uma classe simples apenas para testar diretamente a consulta e o erro foi o mesmo.

Segue abaixo o código:

import com.sun.jna.Library;
import com.sun.jna.Native;

public class testeAdviceJNA {
    
    static String resultado ="";

    public static void main(String[] args) {      
        resultado = execAdMediaParcialDLL("A7D0DBAC-0EEB-45F4-B3E4-A0E9700226B7",2,1,111,6,84,0,332,10,46,2441,112);
        System.out.println("Saída = " + resultado);
    }

    /**  Interface onde serão declarados os métodos contidos na dll */
    public interface DLL extends Library {
        public String CalcularMediaParcial(String GUID,int idEmpresa,int idGrupoEmpresa,int idUsuario,int idPeriodoLetivo,int idCurso,int idCiclo,int idSerie,int idFaseCalendario,int idProfessor,int idDisciplina,int idTurma);
    }

    /** Método que carrega a DLL */
    public static DLL loadAdMediaParcialDLL() {
        return (DLL) Native.loadLibrary("AdMediaParcial.dll", DLL.class);
    }

    /** Método que executa a DLL */
    public static String execAdMediaParcialDLL( String GUID, int idEmpresa, int idGrupoEmpresa,int idUsuario,int idPeriodoLetivo,int idCurso,int idCiclo,int idSerie,int idFaseCalendario,int idProfessor,int idDisciplina,int idTurma) {

        String retorno;
        
        // Carrega a DLL
        DLL consultaDll = loadAdMediaParcialDLL();
        
        // Realiza a consulta
        if (consultaDll != null) {
            // Se carregou, executa a função
            retorno = consultaDll.CalcularMediaParcial(GUID,idEmpresa,idGrupoEmpresa,idUsuario,idPeriodoLetivo,idCurso,idCiclo,idSerie,idFaseCalendario,idProfessor,idDisciplina,idTurma);
        } else {
            // Se não, alerta para uma falha
            System.out.println("[execAdMediaParcialDLL] falha na execução!");
        }
        return retorno;
    }
    
}

Se alguém já passou por alguma situação semelhante puder dar uma orientação, fico muito grato!

Criado 13 de setembro de 2012
Respostas 0
Participantes 1