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!