JNA/JNI com DLL activex

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?

Use o Jacob ( http://www.danadler.com/jacob/ ) para acessar DLLs ActiveX.

Utilize JNA para utilizar a DLL em seu programa, é muito melhor que JNI (na minha opnião).
http://today.java.net/article/2009/12/20/simplify-native-code-access-jna
https://jna.dev.java.net/

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

Para registrar a dll ou controle activex use o regsvr32:

regsvr32 [seucontrole.dll ( ou .ocx)]

eu tentei esse comando mas deu erro jaja eu posto o erro aki

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.

É possível desabilitar no painel de controle.

É, 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.