Dúvidas JNI acessando DLL

Olá a todos.

Estou precisando acessar uma dll simples que ao enviar um determinado número, ela retorna a valor enviado subtraido 1.
O código que preparei foi o seguinte:

public class AcessoJNI
{
    public  AcessoJNI()
    {}

    public int subtraiContador(int contador)
    {
        return(SubtraiContador(contador));
    }

    public native   int SubtraiContador(int contador);
    
    static
    {
        System.loadLibrary("itLog");
    }
}

A dúvidas são:
Para que a classe java acesse o arquivo itLog.dll, é necessário criar o .h e .c da classe java? Pois todos os exemplos que vi na net referen-se a criação da dll a partir da própria classe, e não simplesmente acessá-la.

Caso tenha a necessidade de criar a base em c, é obrigatório anexar o .h da dll para criação do .c ?

Att.
Ederson.

Olá

Você deve usar javah para criar o arquivo header do programa em C que quer acessar. Se for uma DLL já pronta faça um programinha em C para acessa-la. Siga exatamente este roteiro

[]s
Luca

Eu acesso uma dll(Objecto COM) feito em delphi com o Java COM Bridge(JACOB) sem precisar de nada em C. Não sei se é o seu caso, mas talvez valha a pena dar uma olhadinha.


http://danadler.com/jacob/index.html

Obrigado Luca.

Mesmo para o caso de uma DLL já pronta, há necessidade de se passar por todos esses passos novamente?
Além disso, é necessária realizar toda a codificação para realizar esta tarefa?

Grato pela atenção.
Ederson.

Olá

Usando JNI é preciso seguir o roteiro. Se vc vai desenvolver a DLL pode usar os headers criados pelo javah. Mas se vai usar uma DLL já pronta precisa fazer um método em uma linguagem (C por exemplo) que consiga acessar direto a DLL e chamar este método pelo Java.

Com Jacob sei que a coisa é diferente mas nunca usei.

[]s
Luca

Mto obrigado Luca.

Eu pensei que existisse uma forma mais simples para realizar tal tarefa, mas não consegui encontrar.

Vou analisar o Jacob e posto aqui qual foi a impressão final.

Att.
Ederson.

Mais uma dúvida para concluir:

O processo final então fica:
Uma DLL ou SO (a partir do java) para acessar N dlls nativas?

Grato.
Ederson.

Olá

[quote=“Ederson Soares”]O processo final então fica:
Uma DLL ou SO (a partir do java) para acessar N dlls nativas?[/quote]

Com JNI o Java não chama diretamente DLL ou SO a menos que a DLL ou SO tenha sido escrita de acordo com as convenções do JNI.

Uma sugestão: testa Simple JNI e depois conta pra nós se é bom ou ruim.

[]s
Luca