Olah,
moçada, ja li o tutorial da sun, e alguns outros bons tutoriais de JNI, porem, estou com um problema, sei que temos que importar o .h gerado pelo javah, e usar um padrão nos nomes dos metodos nativos…
porem, imaginem se essa dll for disponibilizada por uma empresa, e essa empresa nem sabe o que é java, muito menos jni…
então, a unica coisa que posso é executar os metodos dessa dll como se fosse uma caixa preta… não é possivel modificar a dll…
se não possivel, vcs acham que existe como fazer um meio campo entre a dll ja existente e uma nova dll com o padrão??? sei lah… é um negocio meio louco, mas, se alguem tiver alguma coisa, agradeço…
[]'s
vc pode criar uma dll sua que serve como “ponte” entre o java e a dll… dai na sua dll vc poe pra rodar com o java e nas funcoes simplesmente chama as funcoes da dll…
hehehe,
é isso ai Felipe, deu certo…
porem, não ha como fazer de forma generica… esse é o problema… pq onde trabalho, agente recebe dll’s com RN’s dos clientes, e tava pensando na forma de passar direto pros programadores java…
mas é isso ai…
brigadão…
Olá, Rodrigo, como vai?
Eu tmb estou com o mesmo problema. Preciso acessar as funções de uma DLL nativa, que já está pronta. Vc poderia enviar um exemplo baseado na sua solução e explicar como vc fez? A DLL-ponte vc fez em C++?
Abraço.
Flávio
E ae???
Isso é o que eu chamo de desenterrar um tópico…
Use JNA é bem mais simples… https://jna.dev.java.net/
Nunca usei mais li muitas vezes que é mais fácil de implementar do que o JNI…
Abraço…
Pois é, coisas da necessidade, rs!
Eu tinha conseguido resolver com o Jenie, porém com dll de terceiros não vai rolar. Pouco antes de ver sua resposta, Danilo, acabei achando um artigo sobre o JNA.
Muito obrigado pela ajuda! Vou dar uma olhada no link que vc mandou.
Abraço.
Flávio
Ola,
Uma outra opcao eh fazer o que o Felipe comentou. Criar a sua propria dll. No meu caso JNA nao funcionou entao eu tive que criar a minha propria dll.
Olá, wJava.
Com JNA funcionou. No meu caso estou acessando uma DLL desenvolvida por terceiros.
Abraço.
Flávio
Galera comigo vou ter que usar a JNI mesmo, então estou pensando em criar uma ddl pronta para JNI e ela chamando a DLL que gostaria de usar, minha duvida é se alguem pode dar um exemplo de como chamar uma DLL de terceiro dentro de uma DLL voltada para o JNI, eu montei minha classe java, gerei o .h, apartir dele montei minha dll “ponte” agora preciso chamar a DLL do terceiro.
Outro ponto minha dll do terceiro foi feita em C#, e estou montando minha DLL de ponte pelo C com o gcc, será que funcionará? ou terei que gerar a ddl em C# tambem? utilizando o visual studio? Obrigado!
Galera estou tentando acessar uma dll de terceiros pelo JNA dessa forma:
public interface DllCatraca extends Library {
//define qual catraca sera utilzada para comunicação
public boolean InicializaComunicacao(String ip);
}
Aqui eu chamo o metodo:
public static void main(String[] args) {
System.out.println("Carregando...");
//carrego a dll
DllCatraca lib = (DllCatraca) Native.loadLibrary("TCA", DllCatraca.class);
boolean ret = false;
ret = lib.InicializaComunicacao("192.168.1.22");
System.out.println(ret);
}
Não sei mais como eu posso fazer, ta dando esse erro:
[code]
A fatal error has been detected by the Java Runtime Environment:
Internal Error (0xeedfade), pid=7156, tid=6532
JRE version: Java™ SE Runtime Environment (8.0_31-b13) (build 1.8.0_31-b13)
Java VM: Java HotSpot™ Client VM (25.31-b07 mixed mode, sharing windows-x86 )
Problematic frame:
C [KERNELBASE.dll+0x12f71]
Failed to write core dump. Minidumps are not enabled by default on client versions of Windows
An error report file with more information is saved as:
C:\Users\i9\Documents\NetBeansProjects\CatracaPR_1\hs_err_pid7156.log
If you would like to submit a bug report, please visit:
The crash happened outside the Java Virtual Machine in native code.
See problematic frame for where to report the bug.
#[/code]