Como acessar dll nativamente

11 respostas
S

Pessoal, estou agregando um processo de biometria do qual tem um demo em java e estu utilizando a mesma para integra-las em minhas classes através do eclipse, mas estou tendo a msg:

java.lang.UnsatisfiedLinkError: setParameterValue at br.com.circular.sgf.biometria.VeriFingerWrapper.setParameterValue(Native Method)

alguém pode me dizer onde posso estar procurando este problema ?

Na demo ele funciona bem, será que falta algum path ?

Aguardo

11 Respostas

Luca

Olá

Não entendi sua dúvida, recomendo que utilize a busca do GUJ.

[]s
Luca

S

Conforme esta msg que o eclipse me apresentou, o que pode ter ocasionado ? Para acessar dll eu tenho que coloca-la em algum path ?

Luca

Olá

Eu não tinha entendido o que era a tal demo.

Da API do Java:
[color=darkred]
public class UnsatisfiedLinkError extends LinkageError

Thrown if the Java Virtual Machine cannot find an appropriate native-language definition of a method declared native. [/color]

Coloque a dll no mesmo diretório da aplicação ou em algum diretório que seja localizável pela variável de ambiente PATH.

[]s
Luca

S

Ok, Luca, hoje estou em casa e não tenho este ambiente aqui, mas amanhã de manhã eu farei isto e atualizo este assunto se deu certo ou não.

Por enquanto muito obrigado,

:slight_smile:

S

Luca, chequei se o caminho da dll estava no path e confirmei que sim, você tem mais alguma idéia do que pode ser ?

Aguardo :?:

furutani

Você pode usar System.load("caminho/para/dll");

S
Furutani não deu certo, segue um pedaço do código que inclui o path para vc dar uma olhada:
private VeriFingerWrapper() {
	}

	static {
		try {
			System.loadLibrary("C://VeriFinger_42_SDK//VeriFinger 4.2 SDK Extended//BinVFJavaW42");
		} catch (UnsatisfiedLinkError e) {
			System.out.println("Error loading VeriFinger - " + e.getMessage());
			e.printStackTrace();
		}
	}

Esta correto ? Este erro é porque não esta achando a dll ?

furutani

Usando o System.load("caminho/para/dll"); você pode passar uma string com o caminho completo
por ex.

System.load("c:\\biblioteca.dll");

Com o System.loadLibrary("biblioteca"); você só passa o nome da dll e o Java tenta achar a dll algum lugar que não me recordo onde.

JP1

furutani:


Com o System.loadLibrary("biblioteca"); você só passa o nome da dll e o Java tenta achar a dll algum lugar que não me recordo onde.

Não seria no path do sistema?

S

Pessoal, eu consegui fazer o acesso mas tive que mexer em minha estrutura inteira de Package, isto é, antes era: br.com.circular.sgf.ponto então “desmontei” este package colocando somente o raiz (br) e funcinou, mas eu não posso ficar desta forma, alguém sabe o que esta ocorrendo ?
:wink:

arianrp

SINVAL, a DLL que vc esta carregando foi vc msm que escreveu???

Tpw, a assinatura do metodo dentro da dll ficaria assim

JNIEXPORT void JNICALL Java_nomePacote_nomeClasse_assinaturaMetodo(JNIEnv *env, jclass);

eh isso aew
:smiley:

Criado 20 de julho de 2005
Ultima resposta 23 de jul. de 2005
Respostas 11
Participantes 5