8482348758

8482348758



Jacek Rumiński - Język JAVA - Rozdział 8

jclass c = (env)->GetObjectClass(o); gdzie o jest zmienną typu jobject

2.    pobrać identyfikator zmiennej dla danej klasy poprzez podanie nazwy zmiennej oraz sygnatury:

jfielddID id = (env)->GetFieldlD(c, ”a”, ”1”); id przyjmuje wartość 0 jeżeli nie ma szukanej zmiennej w klasie reprezentowanej przez obiekt c,

3.    pobrać lub ustawić wartość zmiennej poprzez podanie identyfikatora id oraz obiektu o, np.:

jint a = (env)->GetlntField(o,id); lub

(env)->SetlntField(o,id,a);

W zależności od typu zmiennej można wykorzystać różne funkcje np. SetObjectField(), GetObjectField(), Getl_ongField(), SetDoubleField(), itp.

Wykorzystanie pól statycznych jest analogiczne do powyższego schematu z tą różnicą że w kroku 2 i 3 należy wywołać odpowiednie funkcje GetStaticFieldlD()SetStaticlntField{) (lub podobne innych typów), przy czym funkcje {Set,Get}Static* jako argument wykorzystują zmienną typu jclass zamiast jobject (odwołanie się do obiektu klasy Class reprezentującego klasę zamiast do obiektu będącego wystąpieniem klasy).

Przykładowe fragmenty kodów w Javie i w C ukazujące dostęp do pól mogą być następujące:

//Liczenie.java: class Liczenie{

static String str=”Operacja zakończona”; int suma = 10;

(...)

public native void oblicz(int a, int b); public int suma(int a, int b){ return (a-»b);

}

(...)

i //policz.cpp:

(...) JNIEXPORT void JNICALL Java_Liczenie_oblicz(JNIEnv *env, jobject o, jint a, jint b){ jclass c = (env)->GetObjectClass(o); jfieldlD id = (env)->GetFieldlD(c, "suma”, "I”); if (id==0)

return;

jint s = (env)->GetlntField(o,id); printf(„Oto wartość sumy argumentów: %d”,s);

(env)->SetlntField(o,id, (env)->CalllntMethod(o,id,a,b)); id - (env)->GetStaticFieldlD(c, "str”, ”Ljava/lang/String;”); if (id==0)

return;

jstring tekst = (env)->GetStaticObjectField(c,id); printf(tekst);

}

8-10



Wyszukiwarka

Podobne podstrony:
Jacek Rumiński - Język JAVA - Rozdział 8Rozdział 8 Integracja Javy z innymi językami - JNI. Programo
Jacek Rumiński - Język JAVA - Rozdział 8 InetAddress. getAIIByName(String nazwa), InetAddress.
Jacek Rumiński - Język JAVA - Rozdział 8 identyfikator protokołu oraz nazwę zasobów. Identyfikator
Jacek Rumiński - Język JAVA - Rozdział 8 Powyższy program umożliwia pobranie źródła wskazanego pliku
Jacek Rumiński - Język JAVA - Rozdział 8 -    nasłuch, -    akceptacja
Jacek Rumiński - Język JAVA - Rozdział 8 public static void main(StringQ args) { Socket gniazdo; Str
Jacek Rumiński - Język JAVA - Rozdział 8 if (args.length > 0) { host = args[0];} for (int n = 0;
Jacek Rumiński - Język JAVA - Rozdział 8 host = args[0];} try { gniazdo = new Socket(host,
Jacek Rumiński - Język JAVA - Rozdział 8 strumienWy.println(echo); //wyślij do serwera
Jacek Rumiński - Język JAVA - Rozdział 8 }//od try catch (SocketException
Jacek Rumiński - Język JAVA - Rozdział 8 serwera. Należy podkreślić, że biblioteki kodów konieczne d
Jacek Rumiński - Język JAVA - Rozdział 8 ■ zbiór metod (funkcji) umożliwiających wymianę danych i
Jacek Rumiński - Język JAVA - Rozdział 8 GenericServlet HttpServlet definiowane kolejno w dwóch
Jacek Rumiński - Język JAVA - Rozdział 8 infoSystemu -> Java_lnformacje_infoSystemu, (brak nazwy
Jacek Rumiński - Język JAVA - Rozdział 8 tego komentarza zawierającego nazwę klasy, w ciele której
Jacek Rumiński - Język JAVA - Rozdział 8 typ w Javie, typ rodzimy, rozmiar. typ dla C/C++
Jacek Rumiński - Język JAVA - Rozdział 8 printf("Obslugiwana aktualnie opcja to: %s

Jacek Rumiński - Język JAVA - Rozdział 8 gdzie podawany czas zależy oczywiście od ustawień
Jacek Rumiński - Język JAVA - Rozdział 8 Na zakończenie tej sekcji warto przedstawić w skrócie zagad

więcej podobnych podstron