Acessar uma DLL ja existente com JNI

10 respostas
R

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

10 Respostas

F

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…

R

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…

F

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

J

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…

F

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

W

Ola,

Usa JNA… da uma olhada nesse blog:http://www.urubatan.com.br/chamando-metodos-nativos-dllso-em-java-sem-jni/

Abracos.

W

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.

F

Olá, wJava.

Com JNA funcionou. No meu caso estou acessando uma DLL desenvolvida por terceiros.

Abraço.

Flávio

S

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!

C
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:
#
# A fatal error has been detected by the Java Runtime Environment:
#
#  Internal Error (0xeedfade), pid=7156, tid=6532
#
# JRE version: Java(TM) SE Runtime Environment (8.0_31-b13) (build 1.8.0_31-b13)
# Java VM: Java HotSpot(TM) 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:
#   http://bugreport.java.com/bugreport/crash.jsp
# The crash happened outside the Java Virtual Machine in native code.
# See problematic frame for where to report the bug.
#
Criado 17 de dezembro de 2004
Ultima resposta 26 de fev. de 2015
Respostas 10
Participantes 7