Erro ao acessar DLL

Olá pessoal, bem depois de muita luta, consegui resolver o problema de acessar uma dll pelo java.

Agora o que está acontecendo é algo muito estranho, pois a implementação não funciona apenas no projeto que deveria funcionar. Ou seja: se eu criar outro projeto, rodar pelo NetBeans, tudo funciona.

O erro é o seguinte:

Exception in thread "Timer-0" java.lang.UnsatisfiedLinkError: IsRunning

Ou seja, não tá encontrando o método nativo.

Sendo que os arquivos, .dll e .h estão no proejto.

Existe alguma configuração diferente que possa ser feita no Eclipse para o mesmo encontrar o arquivo?

Abraços

Não sei como resolver isso no eclipse

Quando eu precisava acessar uma DLL, eu inseria a mesma em uma (e necessariamente apenas uma) dessas pastas:

-&gt na pasta onde fica as dlls da JVM;
-&gt na pasta onde fica as dlls do SO;

Tente fazer isso, depois posta ai, ok?

[]'s.

Como está acessando via JNI ou outra forma?, essa dll esta na pasta system32 do Windows?

Opa, valeu pelas respostas, mas seguinte: Essa dll não precisa estar em nenhuma outra pasta do sistema, pois ela foi feita por mim, e possui o aquivo .h bonitinho.

Volto a comentar, o problema só ocorre em um projeto do Eclipse específico, criando outros workspaces no eclipse ou no NetBeans o problema não ocorre, é algo específico do projeto, Path ou algo assim.

Alguma idéia de configuração para o Eclipse?

Abraços

Por exemplo, como eu posso colocar um arquivo .dll e um .h como lib do projeto? Pois na parte de BuildPath ele só deixar colocar .jar.

Galera, alguém tem noção do que tipo de configuração pode estar errada num projeto específico para dar esse tipo de erro? É um ABSURDO isso.

Abraços

é…no eclipse não sei realmente como fazer.

Acho que a única alternativa é fazer o que eu te disse. Aí não precisa configurar nada no eclipse.

E não precisa os arquivos de geração da DLL não, se vc já a gerou, blz?

[]'s!

Como eu tinha falado vc precisa ter esse arquivo .h que deve ser gerado pelo compilador no seu projeto e a dll precisa estar no system32, você tentou fazer isso e rodar no Eclipse?

Galera, agora descobri uma coisa muito interessante.

Se a minha classe que está chamando essa dll estiver dentro de um package, algo como. br.com.empresa.dll ela não funciona !!!

Agora, se estiver fora, ou seja, na raiz do projeto como DefaulPackage ela funciona!!

observe o código:

class Monitor {
	public native boolean IsRunning();

	static {
		System.loadLibrary("Monitor");
	}
	
	public static void main(String[] args) {
	        
         Monitor  objeto= new Monitor();
              
         if(objeto.IsRunning()) 
            JOptionPane.showMessageDialog(null,"TRUE");
        else
            JOptionPane.showMessageDialog(null,"FALSE");           

	}
}

Observe que essa classe não possui nenhum pacote específico.

Beleza, agora outro problema, caso eu tente usar essa classe em uma outra classe de outro pacote, também não funciona. Eu acho que tem algum conceito de OO, ou algo específico que eu esteja errando, alguma sugestão?

Abraços