Javafree
/usr/local/aplicacoes/javafree/class/header_forum.php:4: Notice: $show_banner is an undefined variable
Página Inicial do Fórum > [Tutoriais] - Java em Geral

JNI - Java Native Interface



Criar novo tópico   Responder tópico


  1. cleuber_s
    Posts:219


    Comment Arrow

    Publicado em: 09/04/2009 23:18:44

    Java Native Interface


    Leia também:
    JNI - Iteração Java e Delphi
    JNI em Linux com GCC


    Devido aos vários questionamentos, de várias pessoas, e aqui mesmo no Fórum JavaFree, e por se tratar de um recurso valioso que pode ter uma grande aplicabilidade. Estou disponibilizado este singelo tutorial sobre JNI ( Java Native Interface). Ao longo deste tutorial poderemos formar uma base de conhecimento sobre o assunto, a ser complementado com os livros e tutoriais na web que indico no final do mesmo.

    Breve respostas:
    * O que preciso instalar?
    Precisa ter instalado o J2SDK, e é claro o compilador para a biblioteca nativa que você irá utilizar.

    * O que preciso conhecer?
    Precisa saber lidar com conhecimento básico de Java, exceções e OO; além disso conhecer bem a linguagem da biblioteca nativa.

    * Existe dificuldade?
    Não existe dificuldade desde que preenchido os pré-requisitos anteriores.



    [size=18]1. Visão Geral de JNI

    A Java Native Interface, é um framework que fornece recursos, com a Máquina Virtual Java, para utilização de recursos específicos em determinado Sistema Operacional, ou biblioteca compartilhada e vice-versa. Pelo motivo o qual os Sistemas Virtuais não tem acesso direito à funções do hardware e etc. Com a JNI esta barreira é quebrada. É óbvio que a portabilidade do Java desaparecerão, porém recursos como impressoras fiscais, porta COMX, Modem, USB, e etc podem ser facilmente acessados. Estarei dando exemplos no decorrer deste tutorial.

    A JNI permite que um código escrito em Java, utilize a implementação de uma biblioteca escrita em C/C++, Assembler, e outras tantas linguagens de programação.

    Usa-se JNI em determinadas situações em que um código Java não pode acessar certos recursos, por causa da estrutura dos Sistemas Vituais (sob qual a Máquina Virtual Java foi implementada).

    Além disso, você pode ter um conjunto de bibliotecas escritas em outras linguagens, e pode querer disponibilizá-las em seus programas Java. Isso facilita até o reuso de aplicações não-java. Pode ser usado para implementação de pontos críticos, em aplicações que exigam recursos de baixo-nível como código IN LINE, Assembler, e sua aplicação Java pode chamar todas essas funções.

    A JNI, também habilita a você o uso das vantagens da Linguagem de Programação Java em seus métodos nativos, você pode capturar e lançar exceções de uma biblioteca qualquer, e tratá-las dentro de seu programa Java.

    Para exemplo, a figura seguinte mostra como um programa usando código em C, pode usar JNI para ligação com classes Java.



    Facilmente podemos ver que o JNI, serve para interagir entre programas Java e outros programas escritos em liguagens diferentes. A figura abaixo demonstra isso, juntamente com a possibilidade do tratamento de exceções e outras implementações da base de uma aplicação escrita em C.




    [size=18:d0efc1a997]2. Escrevendo um programa Java com métodos nativos.[/size:d0efc1a997]

    A partir de agora criaremos um pequeno programa Java(o básico Hello World!), porém escrito em métodos nativos. A seguinte figura ilustra como será a estrutura de nossa aplicação:



    Vamos implementar uma Classe chamada HelloWorld, e declarar um de seus métodos nativo.

    *Método nativo é um função que foi chamada diretamente de uma bibloteca, externa à sua aplicação Java.





    O método nativo displayHelloWorld(), é o método "carregado" pelo JNI, através do comando System.loadLibrary("hello". A palavra chave native indica ao compilador que é uma função de uma biblioteca escrita em uma outra linguagem. Existe um segmento de código nesta classe que é estático, determinando que os métodos nativos carregados podem ser usados ao longo da implementação da classe. O argumento passado em System.loadLibrary é o recurso compartilhado que iremos usar, a biblioteca específica que faremos depois.

    Em seguida compile o código acima.
    javac HelloWorld.java



    Agora iremos desenvolver a implementação do método nativo, em outra linguagem que não seja Java.
    Agora bastante atenção, iremos usar um recurso muito útil que o ambiente da JSDK nos oferece, o utilitário javah. Iremos gerar este código(o HEADER) como arquivo HelloWorld.h, que está ecrito na linguagem C++.

    Execute o seguinte comando no arquivo com o utilitário do JSDK na sua classe:
    javah -jni HelloWorld



    A assinatura do método seguinte indica que o método será exportado pelo JNI, e usado na nossa classe HelloWorld.class:



    Neste provesso é utilizada a biblioteca jni.h, que vem no jsdk(na pasta includes), esta biblioteca fornece os mecanismos JNI para o método interagir com nossa classe.
    Adota-se como nomenclatura o padrão, a linguagem da exportação em seguida o underline, depois o pacote, underline, e o nome do método em si.



    Agora temos abaixo a implementação do método nativo e o código completo que deve ser salvo como HeloWorldImp.c



    Este método imprime o texto "HelloWorld!" com o comando printf.

    [list]- jni.h - Esse arquivo prove infomações que o código nativo precisa para interagir com a JRE.[/list]
    [list]- HelloWorld.h - O arquivo h. que você gerou anteriormente.[/list]
    [list]- stdio.h - fornece mecanismos de saída (printf) e outros mais. [/list]

    Além de criar os arquivos iremos também compartilhar as bibliotecas. Lembre-se que na implementação da classe HelloWorld, havia um trecho de código chamado System.loadLibrary("hello". Então é necessário compilar essas bibliotecas, e torná-las compartilhadas para que a classe possa encontrá-las. Criaremos uma dynamic link library (DLL) chamada hello.dll. Como o processo para criar uma DLL exige a construção de um compilador. Eu estou usando o Microsoft Visual C++ Toolkit 2003 , porém por praticidade estou disponibilizando os arquivos logo abaixo.

    Mas para quem for utilizar este mesmo compilador segue a linha de comando para gerar a DLL:


    Ob.: Talvez você precisará copiar os aquivos "jni.h" e "jni_md.h" do J2SDK, para o diretório INCLUDE do compilador C++.

    O compilador gerará alguns arquivos, mas nós precisaremos apenas do hello.dll. Esse arquivo deve ser posto no diretório de sua aplicação Java.
    Depois disso devemos rodar a nossa classe HelloWorld usando o interpretador Java:

    java HelloWorld



    A saída será o seguinte:

    Hello World!



    A implementação de JNI, abre uma grande gama de possibilidades que podem ser aproveitadas, dadas as limitações da JVM. Estarei implementando a seguir um básico aplicativo , que retira os dados de variáveis de um código nativo.
    Vimos, no entanto, a utilização desses códigos nativos em um programa Java de forma a executar somente funções pré-definidas. Mas agora aprederemos como implementar uma interação entre Java e uma outra linguagem.


    [size=18]. Interagindo Java e Programas Nativos

    A Java Native Interface define um padrão de nomes e convenções de funções que só a Máquina Virtual Java pode localizar e invocar nos métodos nativos. Esta parte do tutorial ensina, como esses padrões podem ser usados para criar funções JNI e como declarar tipos e como eles podem ser corretamente usados tanto pelo programa Java, como pelo método Nativo.

    É necessário lembrar que na declaração de um método nativo no Java ele precisa:

    [list]- Ter a palavra-chave native em sua assinatura.[/list]
    [list]- Não ter implementação alguma, no corpo do método.[/list]

    Vamos implementar agora um novo exemplo que pega informações passadas como parâmetros de uma aplicação Java, processa em código nativo e devolve:


    >>Desta vez temos o método nativo com um tipo de retorno inteiro e um parâmetro.



    Compile o código:

    javac Prompt.java



    Vamos gerar o header da biblioteca automaticamente com o comando:

    javah -jni Prompt



    Veja que o arquivo gerado contém o seguinte:



    Podemos ver que foi gerado um método nativo que contém um tipo de retorno jint, e parâmetros jint e jobject. Eles são tipos normatizados pela JNI para possibilitar a comunicação entre aplicativos. Isso faz com que o compilador C++ possa mapear todos os tipos usados e os reconheça, de acordo com a biblioteca importada (jni.h).
    Abaixo segue uma tabela com os tipos Java e seus equivalentes JNI:

    Tipo Java | Tipo Nativo | Tam. em bits
    --------------------------------------------
    boolean | jboolean | 8, sem sinal
    byte | jbyte | 8
    char | jchar | 16, sem sinal
    short | jshort | 16
    int | jint | 32
    long | jlong | 64
    float | jfloat | 32
    double | jdouble | 64
    void | void | n/a



    Desta forma vemos que, com foi dito antes, a JNI é uma interface entre códigos Java e outras linguagens. Tendo a implementação JNI e seguindo seus padrões de tipos, objetos podemos facilmente estabelecer uma comunicação entre recursos de diferentes tecnologias. Como a linguagem C++ é Orientada à Objetos podemos usar recursos entre ambas, e além disso, C++ nos fornece acesso a recursos de baixo nível (low level) que podemos usar em nossas aplicações Java.
    Abaixo segue também a implementação de objetos na JNI. Os objetos são passados por referência, a JNI implementa um conjunto de tipos que são todos subclasses (conceitualmente), de jobject como segue:



    Agora segue a respectiva implementação do método nativo, do arquivo salvo como PromptImp.c, que deve ser compilado gerando a DLL prompt.dll:



    Assim você pode compilar este código no seu compilador C++, ou como já foi descrito acima, gerando a DLL prompt.dll e rodando a classe java Prompt.class, teremos o seguinte resultado:

    java Prompt
    Resultado: 4



    Podemos ver desta forma, que o JNI pode extender as potencialidades da linguagem Java, dando recursos que o Java pode não ter, poém sendo agregado à uma linguagem como o C++ pode ser bastante poderoso no acesso à recursos que lhe são limitados. A JNI não possibilita a interface com o C++, apenas, mas com DELPHI, e qualquer oura linguagem que tenha uma biblioteca JNI disponível, pois é ela que faz essa interação. Assim podemos acessar desde de espaço em disco e memória, até portas COM[X] para enviar e receber dados quaisquer.

    Espero que tenha agregado conhecimento, um abraço!



    Leia também:
    JNI - Iteração Java e Delphi
    JNI em Linux com GCC

    _________________



  1. rodrigomaia
    Posts:4


    Comment Arrow

    Publicado em: 09/04/2009 23:18:44

    Olah,

    teu tutorial é muito bom... porem, ainda me resta um duvida...

    e se eu não puder alterar a dll ??? se essa dll é disponibilizada por alguem, e essa pessoa fez a dll sem pensar em JNI ??? esse é meu caso... ja li o tutorial da sun... mais ainda não sei se essa convensão, é obrigatoria ou simplesmente é padrão...

    seria interessante que sabendo a assinatura dos metodos, não importa a linguagem, o JNI poderia fazer isso sem que o programador conhecesse a linguagem nativa...

    existe como isso ser feito???
    _________________



  1. cleuber_s
    Posts:219


    Comment Arrow

    Publicado em: 09/04/2009 23:18:44

    Infelizmente não há essa possibilidade, devido ao fato de o JNI ser um interface entre o java e uma linguagem qualquer. Para que o Java reconheça o código nativo é necessário estar implementanto os tipo(ou objetos) JNI.

    É importante que você tenha os fontes da biblioteca, e depois, apenas adeque aos padrões JNI.
    _________________



  1. jrodrigues
    Posts:1360


    Comment Arrow

    Publicado em: 09/04/2009 23:18:44

    [quote="rodrigomaia"]Olah,

    teu tutorial é muito bom... porem, ainda me resta um duvida...

    e se eu não puder alterar a dll ??? se essa dll é disponibilizada por alguem, e essa pessoa fez a dll sem pensar em JNI ??? esse é meu caso... ja li o tutorial da sun... mais ainda não sei se essa convensão, é obrigatoria ou simplesmente é padrão...

    seria interessante que sabendo a assinatura dos metodos, não importa a linguagem, o JNI poderia fazer isso sem que o programador conhecesse a linguagem nativa...

    existe como isso ser feito???



    Na verdade, isso pode ser feito.
    Mas o programador precisa não só conhecer Java, mas outra linguagem para poder carregar uma biblioteca nativa através de outra.

    Basta na sua biblioteca nativa que será utilizada pela JNI você chamar os métodos da biblioteca nativa de terceiros.
    Ou seja, a idéia é criar um DLL Wrapper (ou Shared Object Wrapper) para sua biblioteca customizada.

    Porém, você precisa conhecer os métodos exportados pela sua biblioteca nativa. Não é difícil.

    Pra te ajudar com o desenvolvimento, existe um padrão chamado Peer Pattern.



  1. cleuber_s
    Posts:219


    Comment Arrow

    Publicado em: 09/04/2009 23:18:44

    Realmente, pode ser criada um biblioteca que implenta o JNI, para carregar a outra que não usa.
    _________________



  1. HumbertoJr
    Posts:261


    Comment Arrow

    Publicado em: 09/04/2009 23:18:44

    Eh


    Alguem pode me dizer qual é o comando equivalente ao que esta acima em GCC?(o que esta acima é do tutorial e é pra compilador VC somente)

    Pior que não lembro mesmo o comando no GCC pra criar DLLs.......
    _________________



  1. HumbertoJr
    Posts:261


    Comment Arrow

    Publicado em: 09/04/2009 23:18:44

    Eh[quote="HumbertoJr"]


    Alguem pode me dizer qual é o comando equivalente ao que esta acima em GCC?(o que esta acima é do tutorial e é pra compilador VC somente)

    Pior que não lembro mesmo o comando no GCC pra criar DLLs.......



    Pior que acabei de lembrar,não sei se foi o correto:



    Consegui criar a dll sim mas quando dou o comando aparece é algo como isso:


    Será que foi erro do comando no GCC?Gerou errado a DLL,pois o codigo esta certo sim tanto é que testei com a DLL que foi disponibilizada em HlloWorld.zip e deu certo mas com a DLL que eu gero ai sim que da erro mostrado acima......enfim alguem pode me ajudar?
    _________________



  1. cleuber_s
    Posts:219


    Comment Arrow

    Publicado em: 09/04/2009 23:18:44

    Tente copiar os aquivos "jni.h" e "jni_md.h" do J2SDK, para o diretório INCLUDE do compilador C++. Depois gere a DLL novamente.
    _________________



  1. HumbertoJr
    Posts:261


    Comment Arrow

    Publicado em: 09/04/2009 23:18:44

    [quote="cleuber_s"]Tente copiar os aquivos "jni.h" e "jni_md.h" do J2SDK, para o diretório INCLUDE do compilador C++. Depois gere a DLL novamente.



    Essa dica ja estava no tutorial e eu ja a tinha feito ,mesmo assim deu o erro listado acima
    _________________



  1. HumbertoJr
    Posts:261


    Comment Arrow

    Publicado em: 09/04/2009 23:18:44

    Eh[quote="HumbertoJr"][quote="HumbertoJr"]


    Alguem pode me dizer qual é o comando equivalente ao que esta acima em GCC?(o que esta acima é do tutorial e é pra compilador VC somente)

    Pior que não lembro mesmo o comando no GCC pra criar DLLs.......



    Pior que acabei de lembrar,não sei se foi o correto:



    Consegui criar a dll sim mas quando dou o comando aparece é algo como isso:


    Será que foi erro do comando no GCC?Gerou errado a DLL,pois o codigo esta certo sim tanto é que testei com a DLL que foi disponibilizada em HlloWorld.zip e deu certo mas com a DLL que eu gero ai sim que da erro mostrado acima......enfim alguem pode me ajudar?



    Nossa nenhuma resposta nesses dias me fizeram virar uma noite(com Coca-cola ) fazendo uns testes ,lendo o manual do GCC e o bom e velho Google........

    Bom não me perguntem porque fiz isso mas o codigo correto no GCC pra gerar a DLL é


    Agora deu certo ..........!
    _________________



  1. flavialares
    Posts:13


    Comment Arrow

    Publicado em: 09/04/2009 23:18:44

    EhBoa tarde!!

    Gostei muito do seu artigo publicado sobre JNI. Estou seguindo as etapas que vc fez, para que o meu código Java acesse bibliotecas em C++, só que está dando o seguinte erro:

    java.lang.UnsatisfiedLinkError: displayHelloWorld
    at hello.HelloWorld.displayHelloWorld(Native Method)
    Exception in thread "main" 0303

    Acho que não estou gerando a dll corretamente. O seu exemplo, igual a este, funciona.

    P.s: Estou utilizando o Visual C++.

    Poderia me ajudar?

    Muito Obrigada,

    Flávia
    _________________



  1. flavialares
    Posts:13


    Comment Arrow

    Publicado em: 09/04/2009 23:18:44

    Oi pessoal,

    Obrigada , já consegui resolver meu problema.
    O problema não era com a geração da dll , e sim com a geração do .h.

    Muito Obrigada,

    Flávia
    _________________



  1. flavialares
    Posts:13


    Comment Arrow

    Publicado em: 09/04/2009 23:18:44

    Oi pessoal,

    Aproveitando o artigo sobre JNI, é possível através do JNI, pegar uma estrutura em C++ e criar uma classe Java com esses dados do C++?

    Desde já agradeço,

    Flávia
    _________________



  1. flavialares
    Posts:13


    Comment Arrow

    Publicado em: 09/04/2009 23:18:44

    Olá!!

    Com este artigo consegui ter acesso as funções do C pelo Java. Estou querendo saber se é possível ter acesso a estrutura do C, vamos supor que eu queira acessar do meu código Java o atributo nome do Código C++. Será que é possível?

    Obrigada,

    Flávia
    _________________



  1. fabioviana
    Posts:27


    Comment Arrow

    Publicado em: 09/04/2009 23:18:44

    Ehola galera!

    estou fazendo uma aplicação jni e quando rodei o programa deu um erro:


    An unexpected exception has been detected in native code outside the VM.
    Unexpected Signal : EXCEPTION_PRIV_INSTRUCTION (0xc0000096) occurred at PC=0x77C0F62B
    Function=outp+0xB
    Library=C:\WINDOWS\system32\MSVCRT.dll

    Current Java thread:
    at sups.comunica.portas.PortaComm.writeOneByte(Native Method)
    at sups.comunica.portas.PortaComm.write(PortaComm.java:4
    at Serial.main(Serial.java:9)

    Dynamic libraries:
    0x00400000 - 0x0040B000 C:\j2sdk1.4.2_06\bin\javaw.exe
    0x7C900000 - 0x7C9B4000 C:\WINDOWS\system32\ntdll.dll
    0x7C800000 - 0x7C8FE000 C:\WINDOWS\system32\kernel32.dll
    0x77F50000 - 0x77FFB000 C:\WINDOWS\system32\ADVAPI32.dll
    0x77DB0000 - 0x77E41000 C:\WINDOWS\system32\RPCRT4.dll
    0x77D20000 - 0x77DB0000 C:\WINDOWS\system32\USER32.dll
    0x77E50000 - 0x77E96000 C:\WINDOWS\system32\GDI32.dll
    0x77BF0000 - 0x77C48000 C:\WINDOWS\system32\MSVCRT.dll
    0x08000000 - 0x08139000 C:\j2sdk1.4.2_06\jre\bin\client\jvm.dll
    0x76B20000 - 0x76B4E000 C:\WINDOWS\system32\WINMM.dll
    0x10000000 - 0x10007000 C:\j2sdk1.4.2_06\jre\bin\hpi.dll
    0x00840000 - 0x0084E000 C:\j2sdk1.4.2_06\jre\bin\verify.dll
    0x00850000 - 0x00869000 C:\j2sdk1.4.2_06\jre\bin\java.dll
    0x00870000 - 0x0087D000 C:\j2sdk1.4.2_06\jre\bin\zip.dll
    0x02C60000 - 0x02C68000 C:\eclipse\workspace\SupsJava\PortComm.dll
    0x76C70000 - 0x76C98000 C:\WINDOWS\system32\imagehlp.dll
    0x59EA0000 - 0x59F41000 C:\WINDOWS\system32\DBGHELP.dll
    0x77BE0000 - 0x77BE8000 C:\WINDOWS\system32\VERSION.dll
    0x76BD0000 - 0x76BDB000 C:\WINDOWS\system32\PSAPI.DLL

    Heap at VM Abort:
    Heap
    def new generation total 576K, used 123K [0x10010000, 0x100b0000, 0x104f0000)
    eden space 512K, 24% used [0x10010000, 0x1002ef08, 0x10090000)
    from space 64K, 0% used [0x10090000, 0x10090000, 0x100a0000)
    to space 64K, 0% used [0x100a0000, 0x100a0000, 0x100b0000)
    tenured generation total 1408K, used 0K [0x104f0000, 0x10650000, 0x14010000)
    the space 1408K, 0% used [0x104f0000, 0x104f0000, 0x104f0200, 0x10650000)
    compacting perm gen total 4096K, used 992K [0x14010000, 0x14410000, 0x18010000)
    the space 4096K, 24% used [0x14010000, 0x14108140, 0x14108200, 0x14410000)

    Local Time = Wed Apr 06 14:21:56 2005
    Elapsed Time = 0
    #
    # The exception above was detected in native code outside the VM
    #
    # Java VM: Java HotSpot(TM) Client VM (1.4.2_06-b03 mixed mode)
    #



    compilei a biblioteca dinamica com o comando:
    gcc -Wl,--kill-at, -I%JAVA_HOME%\include\win32 -I%
    JAVA_HOME%\include -shared PortComm.c -o PortComm.dll


    Alguém pode me ajudar???
    _________________



  1. bslima
    Posts:2


    Comment Arrow

    Publicado em: 09/04/2009 23:18:44

    sou usuario do windows,
    e uso o compilador da brolando
    tcpp 3.0v, pra rodar minhas aplicações
    então o que não ficou claro para mim neste tutorial
    é como gerar a .dll
    esse comnado eu coloco é no dos?
    ou aonde?
    se puderem me esclarecer ficarei grato
    _________________

  1. Comment Arrow

    Publicado em: 09/04/2009 23:18:44

    [quote="rodrigomaia"]Olah,

    teu tutorial é muito bom... porem, ainda me resta um duvida...

    e se eu não puder alterar a dll ??? se essa dll é disponibilizada por alguem, e essa pessoa fez a dll sem pensar em JNI ??? esse é meu caso... ja li o tutorial da sun... mais ainda não sei se essa convensão, é obrigatoria ou simplesmente é padrão...

    seria interessante que sabendo a assinatura dos metodos, não importa a linguagem, o JNI poderia fazer isso sem que o programador conhecesse a linguagem nativa...

    existe como isso ser feito???




    Estou com o mesmo problema do Rodrigo.
    Preciso usar uma biblioteca de terceiro, que muito provavelmente não foi escrita nos padrões JNI.
    Vi a dica do JRodrigues, em criar uma biblioteca itermediária que converse com a outra biblioteca.

    Tenho algumas perguntas:
    Alguém sabe como chamo uma dll em C ?
    Tenho como saber em que linguagem uma dll foi compilada ?
    Tenho como fazer uma engenharia reversa em uma dll ?

    Agradeço desde ja!
    _________________

    Não há nada mais irracional do que fazer as mesmas coisas todos os dias e esperar por resultados diferentes.
    Anonymous



  1. rerodri84
    Posts:3


    Comment Arrow

    Publicado em: 09/04/2009 23:18:44


    Pessoal,

    Estou desenvolvendo meu Trabalho de Conclusão de Curso e neste, vou precisar fazer balanceamento de carga.

    Alguém sabe se em Java ou em C existe alguma função ou método que me possibilite buscar informações do Hardware ? Mais especificamente do Processador e da Memória ! Preciso saber a frequência do processador e a quantidade de memória.

    Estou desenvolvendo uma aplicação distribuída em Java e, caso esta função seja em C, pretendo utilizar o JNI mesmo.

    Abraço galera e desde já obrigado

    Renan



  1. Lich King
    Posts:51


    Comment Arrow

    Publicado em: 09/04/2009 23:18:44

    O comando para criar a dll só pode ser dado no windows?
    Não tem como fazer com q ele crie a .dll e o .so de uma só vez?
    _________________

    programmer.setFucked(user.isStupid() );



  1. chermont
    Posts:2


    Comment Arrow

    Publicado em: 09/04/2009 23:18:44

    Olá Galera,

    Tenho o seguinte header de uma função de uma dll em C++:



    Preciso chamar essa função numa aplicação em Java. Graças a esse tutorial já consigo chamar a dll no Java. Porém estou com dificuldade para receber os valores da função dado que eles são retornados através de ponteiros.
    Alguém tem uma idéia de como eu posso retornar as informações para o Java através do JNI sem ter que alterar a estrutura de return?

    Como eu fujo desses ponteiros dessa função e consigo enviar os parâmetros para o Java.

    a estrutura que eu tenho agora é:
    Em Java a função nativa esta assim declarada:



    e o JNI me gerou a seguinte header:


    Porém desta forma eu não tenho como enviar os parâmetros.
    Será que alguém pode me ajudar?

    Abraços

  1. Comment Arrow

    Publicado em: 11/03/2010 12:55:58

    seu tutorial é bom porém as figuras não carregam!



  1. paulinoivan
    Posts:2


    Comment Arrow

    Publicado em: 16/03/2010 15:43:36

    Olá pessoal descupe-me se estou postando essa mensagem no lugar errado. Gostaria de saber como faço para vertificar se um arquivo está aberto ou sendo utilizado por outro programa em java?

    Grato.

  1. Comment Arrow

    Publicado em: 23/06/2010 08:00:55

    Bom pessoal não consegui entenderr essa parte



    Onde coloco isso??

    Desde já agradeço a todos.
    _________________

    a



  1. staroski
    Posts:4599


    Comment Arrow

    Publicado em: 23/06/2010 11:05:08

    [quote="fabricioempresa"]Bom pessoal não consegui entenderr essa parte

    Onde coloco isso??
    Desde já agradeço a todos.



    Essa é a linha de comando para gerar a DLL exemplificada no seguinte tutorial:
    http://javafree.uol.com.br/artigo/13913/JNI-Java-Native-Interface.html
    _________________

    Ricardo Artur Staroski, OCP-JP
    Blumenau - SC
    Faço seu trabalho Java,
    clique aqui

    Acesse http://www.guj.com.br/



  1. Relacionados