Galera seguinte estou desenvolvendo uma aplicação para RFID, temos uma placa aqui que trabalha com a leitura, temos a DLL dela e documentação.
Problema é que eu consigo carregar a DLL e tal, mas quando tento chamar qualquer metodo da DLL da o seguinte erro:
Exception in thread “main” java.lang.UnsatisfiedLinkError: totalseg.Main.KernelLastError()I
nao sei se aforma como a DLL foi criada influencia na forma que ela será acessada, mas ja vi que uma DLL pode ser feita varias formas e com varias linguagens, mas essa aqui foi no activex
o codigo da classe tentando acessar com JNI está logo abaixo:
public class Main {
/**
* @param args the command line arguments
*/
public static native String ListaPortasSeriais();
public static native int KernelLastError();
static{
System.loadLibrary("Kernel7x");
}
public static void main(String args[]){
Main m = new Main();
m.ListaPortasSeriais();
}
}
o nome do metodo nativo nao esta errado, abaixo esta parte da documentação que fala do metodo:
ListaPortasSeriais: WideString;
Esta propriedade retorna uma string com as portas COM encontradas na máquina, por
exemplo para COM1 e COM2 retorna: ?COM1-COM2?.
é uma metodo que nao reque passagem de parametros
resumindo ele consegue executar o loadlibrary, mas nao executa metodos da DLL, nao consigo entender pq?
Esse erro aconteceu comigo uma vez porque a DLL que eu tava mapeando chamava métodos de uma outra DLL. Leia a documentação e verifique se é por causa disso e se essa DLL depende de alguma outra.
Também pode ser porque que vc está chamando o métodos da DLL mas ele não está encontrando a DLL. No caso de vc utilizar o windows vc deve colocar a DLL dentro da pasta System32 ou vc pode simplesmente colocar a DLL dentro da pasta do seu projeto (que na minha opnião é melhor) que o JNA vai procurar lá.
No caso de compilar a aplicação, copie a(s) DLL(s) para dentro da pasta da sua aplicação.
é galera tem que usar jacob mesmo pq JNA e JNI so servem para DLLs escritas em C/C++ e DELPHI pra DLLs feitas em activex so JACOB mesmo to pegando umas porradas aki dele, nao sei como registrar a DLL
No Windows Vista ou 7, você só consegue registrar alguma coisa se você abrir um Prompt do DOS clicando com o botão direito sobre o ícone do Prompt do DOS (Command Prompt) e usando o item do menu “Run as Administrator…” ou “Rodar como Administrador” (não sei exatamente qual é o nome disso, estou sem um Windows em português para dizer exatamente o nome certo. Aí você executa esse comando como administrador.
[quote=entanglement]No Windows Vista ou 7, você só consegue registrar alguma coisa se você abrir um Prompt do DOS clicando com o botão direito sobre o ícone do Prompt do DOS (Command Prompt) e usando o item do menu “Run as Administrator…” ou “Rodar como Administrador” (não sei exatamente qual é o nome disso, estou sem um Windows em português para dizer exatamente o nome certo. Aí você executa esse comando como administrador.
[/quote]
Olá Entanglement. Isso se chama UAC. É uma tentativa da MS em copiar o mecanismo de segurança dos sistemas unixs. O objetivo só é permitir programas com a devida permissão de executarem.
É, eu até tive de entender como é que funciona o sistema de UAC da Microsoft para anexar a um arquivo .EXE um “manifest” solicitando ao Windows Vista que ele forçasse a pedir aquela tal confirmação quando fosse rodado.