Acessar DLL

6 respostas
R

Olá pessoal, seguinte:

Criamos uma dll com alguns métodos que devem ser usados dentro do sistema, na minha classe java tenho a definição nativa dos métodos, porém ao executar o LoadLibrary, sempre gera esse erro:

Exception in thread "main" java.lang.UnsatisfiedLinkError: ProcessLockManager

Ja li tutoriais de JNI, porém nenhum comentou sobre esse tipo de erro, dei uma pesquisada e alguns dizem que é o PATH, mas aparentemente está ok, alguém tem alguma dica?

Abraços

6 Respostas

T
  • O seu tutorial mencionou que você deve codificar a DLL em C puro, ou então usar um arquivo .def e encapsular o arquivo .h gerado pelo javah com as instruções “extern “C””?

  • Você tem acesso a alguma ferramenta que permita examinar quais são os “pontos de entrada” (entry points") da DLL?

  • Conselho: se possível, evite JNI, ou então use o Jenie ( http://www.servertec.com/products/jenie/jenie.html para acessar seu código nativo.)

R

thingol:
- O seu tutorial mencionou que você deve codificar a DLL em C puro, ou então usar um arquivo .def e encapsular o arquivo .h gerado pelo javah com as instruções “extern “C””?


Sim, a Dll foi feita em c puro

Sim

[/quote]
Certo, o unico problema é tempo pra estudar essa documentação, que não explica nada hehe.

Bem, usando JNI, não bastaria eu:

Declarar meu método nativo:

public static native MetododaDll();

public static voi CarregarDll()
{

      System.loadLibrary("MinhaLindaEQueridaDll");		
		
      boolean result = MetododaDll();
}

Isso funciona, mas mesmo ao tentar rodar o comando javah, sempre retorna dizendo que não conseguiu acessar a classe;

cannot access MinhaClasse.java

Coisa simples, sem complicação…

to certo?

Valeu Thingol

T

javah requer um nome de classe (br.com.minhaempresa.meusistema.MinhaClasse), não o nome de um arquivo .java.

R

Opa, mesmo passando o pacote completo da classe, o javah não funciona, sempre diz que não consegue acessar a classe.

Alguma sugestão?

[]s

T

Acho que não vai dar tempo de você fazer funcionar o JNI se você não está conseguindo nem chamar o javah com os parâmetros adequados :frowning:

C:>javah
Usage: javah [options] <classes>

where [options] include:

        -help                 Print this help message and exit
        -classpath <path>     Path from which to load classes
        -bootclasspath <path> Path from which to load bootstrap classes
        -d <dir>              Output directory
        -o <file>             Output file (only one of -d or -o may be used)
        -jni                  Generate JNI-style header file (default)
        -version              Print version information
        -verbose              Enable verbose output
        -force                Always write output files

<classes> are specified with their fully qualified names (for
instance, java.lang.Object).
Licuri

rodrigoc:
Opa, mesmo passando o pacote completo da classe, o javah não funciona, sempre diz que não consegue acessar a classe.

Alguma sugestão?

[]s

Cara vc fez esses passos:

1º Gerar arquivo .class (javac ArquivoJava.java)

2º Gerar seu arquivo .h (javah -jni ArquivoJava)

?

Eu já passei por esses passos, meu problema é no momento de acessar o método, sempre dá esta exception.

hello é o nome do meu método nátivo, e gerei minha dll utilizando o Visual Studio 6.0.

Já funcei em tudo e não consigo solucionar este erro !

Alguém já teve este erro ?

Criado 22 de agosto de 2006
Ultima resposta 10 de jan. de 2008
Respostas 6
Participantes 3