28 Jan Bielecki + Jam 2
Krok 7. Udostępnienie biblioteki D/J. i wykonanie programu z funkcją rodzimą
Skopiowanie biblioteki do ścieżki poszukiwania, np. C:\Wlndaws. albo zmodyfikowanie parametru PATH i przeładowanie systemu.
Jeśli metoda rodzima ma nazwę name oraz należy do klasy cłass zawartej w pakiecie pkg. to implementująca ją funkcja C++ ma nazwę
Java_pkg_cluss_name
Program źródlany package slpha.gamma; import )ava.applct.*; public
ciass Master extends Appletf
native void onePunO; native void twoFunti;
pubiic void mit O
oneFUnłł; twoFUn{|;
Deklaracje funkcji rodzimych
JWIOCPORT void JNICAŁL Java__aipha_gan»a_Mascer_oneFun TjNIEnv jobjecoT
JNXEXPOftT void JNICALL Java_alpha_gaa»a_Haster_twoFun 7jNIEnv •, jobject);
Typ parametru funkcji rodzimej wynika z rozpatrzenia nagłówka wygenerowanego za pomocą programu javah W tabeli Typy rodzime podano nazwy typów rodzimych, na które są odwzorowywane typy proste Javy.
Dołączanie kodu w C++
Tabela Typy Rodzime Java C++ Rozmiar
boolean
byle
char
short
int
long
float
double
void
jboolean 8 (unsigned)
jbyte 8
jchar 16 (unsigned)
jshort 16
jint
jlong 64 j float 32
jdouble 64 void
Wszystkie typy odnośnikowe są odwzorowywane na typ rodzimy jobject. Jego podtypy wymieniono w tabeli Podtypy obiektowe.
Tabela Podtypy obiektowe
Typ obiektowy Typ rodzimy
jnmlang.Chiss jclass
java.lang.String jstring
Java.lang.Throwablc jthrowable tablica jarray
Ponadto, dla typu jarray wprowadzono podtypy: jobjectArray oraz rodzinę typów jTypcArray. np. jintArray. j boolean A rray. itp. w której Type jest nazwą typu podstawowego.
W szczególności, deklaracja funkcji rodzimej implementującej metodę
native long funtint one. Double two(1J;
przybiera postać
JNIEXPORT jlong JNICALL Java Master fun
7JNlEnv-*, jobject, jint, jobjectArray);
W każdej takiej deklaracji, pierwszy parametr identyfikuje wskaźnik związany z implementacją funkcji rodzimych, a drugi identyfikuje odnośnik do obiektu, na rzecz któcegt wywołano metodę implementowaną jako rodzimą.