Estou com um problema na qual foi me disponibilizado uma DLL feita em C,
com todos os metodos dela para eu acessar em Java, só que estou tentando
utilizar o JNI e até agora não consegui, inclusive coloquei a dll no diretorio do System32 esta me retornando o seguinte erro:
java.lang.UnsatisfiedLinkError: C:\WINDOWS\system32\Suprema.dll: Can’t find dependent libraries
at java.lang.ClassLoader$NativeLibrary.load(Native Method)
at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1751)
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1676)
at java.lang.Runtime.loadLibrary0(Runtime.java:823)
at java.lang.System.loadLibrary(System.java:1030)
at SupremaNI.(SupremaNI.java:52)
Exception in thread “main”
Código Java:
[code]
public class SupremaNI {
public native boolean IsSensorOn();
public native boolean Initialize();
public static void main(String[] args) {
SupremaNI name = new SupremaNI();
System.out.println(name.Initialize());
}
static {
System.loadLibrary("Suprema");
}
}[/code]
Codigo gerado pelo javah
[code]/* DO NOT EDIT THIS FILE - it is machine generated / #include <jni.h>
/ Header for class SupremaNI */
Se o problema não for realmente dependencias de outras bibliotecas, o pacote pode nao estar evidenciado na DLL, o que geralmente lança este UnsatisfiedLinkError.
Se não tiver acesso ao código da DLL, tente usar a biblioteca JNA. Enquanto você não precisar passar alguma String como parametro, ela é uma maravilha!
Eu estou chamando ela no metodo main, pois é o problema que ate tenho um código
JNA só que ja foi barrado a utilização dele e pedido para ser implementado em JNI, o que acontece
também é quem em casa ele me deu este erro abaixo, e na especificacao que foi passada ele retornaria um bool
Exception in thread “main” java.lang.UnsatisfiedLinkError: SupremaNI.Initialize()Z
at SupremaNI.Initialize(Native Method)
at SupremaNI.main(SupremaNI.java:50)
Eu so tenho a especificação, o código veio fechado em DLL mesmo,
sera que teria um descompilador para ele?
Sobre o package ja testei usar o default tbem naum adiantou, deu a mesma
mensagem.
Talvez ela precise de uma DLL do sistema, mas, ao menos eu não consegui utilizá-la no ‘System’ ou ‘System32’ sem a declaração de pack utilizando JNI, se você achar uma forma de fazer isto, eu realmente gostaria de saber
Você pode procurar as dependencias e copiar as DLLs necessárias para o mesmo local da sua (supondo que você tenha uma documentação que as indique, ou contato com o detentor do código da DLL).
De outra maneira, só consigo imaginar formas de testar, mas não de resolver o problema.
Googleando um pouco, descobri que DLLs geradas pelo Borland c++ precisam de uma outra biblioteca que não se encontra na System32: cc3260.dll
Bastaria copiar para lá e tudo estaria ok! Como sua DLL foi criada em C, essa é uma possibilidade.
Desculpa a demora, mas joguei la para a pasta do System32 continou com os mesmos
erros, talvez esteja faltando outra DLL também, será que o código em C não teria
que ser feito pensando em ser utilizado pelo JAVA(JNI)?
Nunca utilizei DLLs em C, na verdade, a idéia de usar uma DLL em java não me desce bem…
As DLLs Delphi que utilizamos para manter a transição parcial do sistema TEM de serem feitas visando sua utilização pelo JNI, aliás, como te mostrei ali em cima…
Se esse for seu caso e a DLL não foi feita assim, é problema…