Executar DLL em J2EE

10 respostas
somma

Bom dia Pessoal!

Estou utilizando o (JNA) para executar DLL.

Nesta DLL consta 4 métodos que são: soma():Double; subtracao()Double; multiplicacao():Double, comparacao():Boolean

A parte de cálculo está funcionando perfeitamente.

Agora a parte de comparar strings só retorna falso mesmo as strings sendo iguais.

Qual a causa disso? A programação desse metodo de comparação precisa que importe mais bibliotecas ou trabalhe com quais tipos para poder ser executada corretamente?

fico no aguardo pessoal!!!

Obrigado

10 Respostas

T

Boa pergunta.

De qualquer maneira, usar JNI ou JNA em JavaEE é um “anti-pattern”. Evite, se puder.

peczenyj

sem olhar o codigo e o que vc esta passando, fica dificil. vc compara (na DLL) o conteudo das strings ou se elas apontam para o mesmo endereço de memoria?

somma

Aceito sugestões!!!

somma
import com.sun.jna.Library;

public interface BibliotecaDinamica extends Library {
	public int soma(int n1, int n2);
	public int mult(int n1, int n2);
	public int sub(int n1, int n2);
	public boolean texto(String s1, String s2);
}

--------------------------------------------------------------------------------------

import com.sun.jna.Native;

public class Wrapper implements BibliotecaDinamica{
	
	BibliotecaDinamica dll = (BibliotecaDinamica) Native.loadLibrary("C:\\testeDll\\BibliotecaDll.dll", BibliotecaDinamica.class);
	
	@Override
	public int mult(int n1, int n2) {
		return dll.mult(n1, n2);
	}

	@Override
	public int soma(int n1, int n2) {
		return dll.soma(n1,n2);
	}

	@Override
	public int sub(int n1, int n2) {
		return dll.sub(n1, n2);
	}

	@Override
	public boolean texto(String s1, String s2) {
		return false;
	}
	
}
-----------------------------------------------------------------------------------------------

Chamada na pagina .jsp

<%
Wrapper wra = new Wrapper();
out.println("Multiplicação: "+wra.mult(10,10)+"</br></br>");
out.println("Soma: "+wra.soma(10,10)+"</br></br>");
out.println("Subtração: "+wra.sub(10,10)+"</br></br>");
out.println("Comparação: "+wra.texto(a,a)+"</br></br>");
%>

ignacio83
@Override   
    public boolean texto(String s1, String s2) {   
        return false;   
    }

Tem certeza que está assim no seu código??? Se estiver assim é por isso…

somma

Mesmo se for assim:

@Override public boolean texto(String s1, String s2) { return dll.texto(s1, s2); }

só retorna falso.

Felagund

e se vc fizer

return s1.equals(s2);
somma

mais aí não estarei utlizando a DLL para comparação!!!

somma

Eu estou navegando pelo google aqui procurando um programa para ver o código desta DLL… pois ai vou saber o porque de retornar só false.

Na minha opinião … os tipos que estão sendo usados não são compatíveis.

somma

function Java_BibliotecaDll_texto (PEnv: PJNIEnv; Obj: JObject): JString; {$IFDEF WIN32} stdcall; {$ENDIF} {$IFDEF LINUX} cdecl; {$ENDIF}

Galera esse é o código da DLL de comparação

Criado 24 de abril de 2009
Ultima resposta 24 de abr. de 2009
Respostas 10
Participantes 5