JNA? - JNA? - Error looking up function 'Hello': The specified procedure could not be found

4 respostas
P

Pessoal,

Estou fazendo uns testes com JNA, fiz uma DLL simples com VB6 para testar.

Project1.TestePabloDLL

Com uma única função

function Hello(nome as String) as String

Chamando por Jacob, funciona perfeitamente.

//ActiveXComponent sC = new ActiveXComponent(“Project1.TestePabloDLL”);

//Dispatch sControl = sC.getObject();

//Variant v = Dispatch.call(sControl, “Hello”, “Pablo”);

<a href="//System.out.println">//System.out.println</a>(v.toString());

Mas quando tento fazer com JNA, não funciona.

Se uso assim

//TestePabloDLL lib = (TestePabloDLL) Native.loadLibrary(“Project1.TestePabloDLL”, TestePabloDLL.class);

//String t = lib.Hello(“Java Rocks”);

<a href="//System.out.println">//System.out.println</a>(t);

Retorna

//Caused by: java.lang.UnsatisfiedLinkError: Unable to load library ‘Project1.TestePabloDLL’: The specified module could not be found.
Se mudo para

//TestePabloDLL lib = (TestePabloDLL) Native.loadLibrary(“TestePabloDLL”, TestePabloDLL.class);

//String t = lib.Hello(“Java Rocks”);

<a href="//System.out.println">//System.out.println</a>(t);

Retorna

//Caused by: java.lang.UnsatisfiedLinkError: Error looking up function ‘Hello’: The specified procedure could not be found.

No segundo exemplo, achou a DLL, mas não consegue invocar o método, o que pode ser?

4 Respostas

T

O JNA não é adequado para chamar DLLs feitas a partir do VB 6.0; você tem de usar o Jacob mesmo.

P

JNA só é adequado para chamar DLLs em C/C++?

P

Não faz diferença a linguagem em que foi desenvolvido. Seu problema é que a API binária de um componente ActiveX/COM/COM+ é mais enrolada do que parece à primeira vista No caso de um componente em VB, seu método “hello” tem que ser chamado usando de forma indireta. Não vou entrar nos detalhes sórdidos deste processo, mas, em resumo, siga o conselho anterior: use o que já está funcionando.

O JNA é mais adequado para chamar APIs publicadas do SO em que vc. está a rodar seu aplicativo.

P

Valeu pessoal, muito obrigado!

Criado 23 de maio de 2008
Ultima resposta 24 de mai. de 2008
Respostas 4
Participantes 3