Java Native Interface – Parte 1
A Java Native Interface JNI 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 de uma DLL gerada em C/C++ ou Assemble. O JNI habilita programadores a escrever métodos nativos para tratar situações em que uma aplicação não pode ser escrita inteiramente na linguagem Java. 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.
Através do uso do padrão JNI podemos integrar nossos projetos Java com DLLs geradas no em C.
O Aplicativo javah
O aplicativo javah essencial para a criação da interface nativa é fornecido pela JDK. Utilizamos este aplicativo para gerar um arquivo .h que define os protótipos dos métodos de uma classe Java em forma de interface C/C++. Esta interface contém as declarações necessárias para compilarmos corretamente os módulos nativos que interagem com a JNI.
O aplicativo javah tem como vantagem reduzir os erros de programação na hora de integração de módulos nativos com a nossa JNI.
Para gerar um arquivo .h com o aplicativo javah devemos seguir com os seguintes passos:
1 - Compilação da Classe Java
1 |
javac MinhaClasse.java |
2 - Criação da Interface Nativa
1 |
javah -jni MinhaClass |
Após a criação da Interface Nativa será gerado um arquivo uma estrutura semelhante a:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
#include <jni.h> #ifndef _Included_nomeClasse #define _Included_nomeClasse #ifdef __cplusplus extern "C" { #endif /* * Comentários sobre o método nativo aqui... */ JNIEXPORT tipoRetorno JNICALL Java_nomeClasse_nomeMétodo (JNIEnv *, jobject[, tipo-parâmetro[...]]); ... #ifdef __cplusplus } #endif #endif |
Na próxima postagem, uma abordagem sobre tipos de dados.