Narzędzia użytkownika

Narzędzia witryny


jni

Różnice

Różnice między wybraną wersją a wersją aktualną.

Odnośnik do tego porównania

Both sides previous revision Previous revision
Next revision Both sides next revision
jni [2008/04/13 00:43]
chappaai
jni [2008/04/13 00:49]
chappaai
Linia 15: Linia 15:
 Przykladowa seria polecen potrzebna do kompilacji przykładu na platformie Windows: Przykladowa seria polecen potrzebna do kompilacji przykładu na platformie Windows:
  
 +<code cpp>
 +javac .\jni_pkg\Jni.java
 +javah -jni jni_pkg.Jni
 +cl -I "​c:​\Program Files\Microsoft Visual Studio 9.0\VC\include"​ -I "​c:​\j2sdk1.4.2_17\include ​
 +-I"​c:​\j2sdk1.4.2_17\include\win32"​ -LD jni_pkg_Jni.cpp -FeJni_lib.dll''​
 +</​code>​
  
-''​javac .\jni_pkg\Jni.java +===== Kod Java ===== 
-  ​javah ​-jni jni_pkg.Jni +Kod zawiera kilka deklaracji przykladowych metod natywnych które sa następnie w nim wykorzystywane. 
-  ​cl -I "c:\Program Files\Microsoft Visual Studio 9.0\VC\include" -"c:\j2sdk1.4.2_17\include ​ + 
-  -I"c:\j2sdk1.4.2_17\include\win32" -LD jni_pkg_Jni.cpp -FeJni_lib.dll''​+<​code ​java> 
 +/** 
 + * @author Lukasz Mosdorf G1ISI 
 + */ 
 +/**  
 + * Program ilustrujący Zastosowanie JNI Java Native Interface 
 + * Kod wywołuje  
 + */ 
 +package jni_pkg; 
 + 
 +public class Jni { 
 +     
 +    public int myInt = 10; 
 +    public static String mystring ​ "JNI example";​ 
 +    public int[] intArray; 
 +    private static native ​ void native_call(); ​ // sample native call  
 +    private static native ​  ​String change_string(String arg); 
 +    private native int sumArray(int[] arr); 
 +    private native int initCppObj();​ 
 +    private native int deleteCppObj();​ 
 +    private native int changeCppObjField(int a); 
 +    private native void callMe(); 
 +    public int cppObjPtr;​ 
 +    private void callback() 
 +    { 
 +        System.out.println("Java wywolana z cpp"​); ​        
 +    } 
 +    //Staticwywolywane na saym poczatku 
 +    static { 
 +    System.loadLibrary("Jni_lib"​);​ 
 +    } 
 +      
 +    public static void main(String[] args)  
 +    { 
 +        Jni jni = new Jni(); 
 +        int arr[] = new int[10]; 
 +        
 +        //​wywołanie metody natywnej, która zmienia podany obiekt String 
 +        String input = jni.change_string("​String wyslany do metody natywnej"​);​ 
 +        System.out.println("​Dostano w Javie zmieniony string"+ input); 
 +         
 +        //​Zapełnienie tablicy danymi i wywołanie natywnje funkcji sumującej 
 +        for (int i = 0; i < 10; i++) { 
 +            arr[i] = i; 
 +        } 
 +        int sum = jni.sumArray(arr);​ 
 +        System.out.println("​Suma tablicy zwrocona z metody natywnej = " + sum); 
 +         
 +        //​inicjalizaja obiektu lol, wskaznik przechowywany w cppObjPtr 
 +        jni.initCppObj();​ 
 +        System.out.println("Obiekt lol zaalokowany"+ jni.cppObjPtr);​ 
 +        //​Wywołanie metody obiektu uprzednio zaalokowanego,​  
 +        //ktora zmienia wartosc jego pola 
 +        jni.changeCppObjField(15);​ 
 +        //wołanie metody która wywołuje motodę obiektu wołającego 
 +        jni.callMe();​ 
 +        jni.deleteCppObj();​ 
 +        System.out.println("Obiekt lol usuniety, ptr: "+ jni.cppObjPtr);​ 
 +    } 
 +
 +</​code>​ 
 + 
 + 
 +===== Kod Cpp ===== 
 + 
 +Poniżej przedstawiono plik nagłówkowy wygenerowany automatycznie przy uzyciu polecenia javah -jni jni_pkg.Jni. 
 + 
 +<​code ​cpp
 +/*Lukasz Mosdorf G1ISI 
 +*Plik "​jni_pkg_Jni.h"​ generowany  
 +*przy wywolaniu polecenia javah -jni jni_pkg.Jni 
 +*/ 
 + 
 +/* DO NOT EDIT THIS FILE - it is machine generated */ 
 +#include <​jni.h>​ 
 +/* Header for class jni_pkg_Jni */ 
 + 
 +#ifndef _Included_jni_pkg_Jni 
 +#define _Included_jni_pkg_Jni 
 +#ifdef __cplusplus 
 +extern "​C"​ { 
 +#endif 
 +/* 
 + * Class: ​    ​jni_pkg_Jni 
 + * Method: ​   native_call 
 + * Signature: ()V 
 + */ 
 +JNIEXPORT void JNICALL Java_jni_1pkg_Jni_native_1call 
 +  (JNIEnv *, jclass); 
 + 
 +/* 
 + * Class: ​    ​jni_pkg_Jni 
 + * Method: ​   change_string 
 + * Signature: (Ljava/​lang/​String;​)Ljava/​lang/​String;​ 
 + */ 
 +JNIEXPORT jstring JNICALL Java_jni_1pkg_Jni_change_1string 
 +  (JNIEnv *, jclass, jstring); 
 + 
 +/* 
 + * Class: ​    ​jni_pkg_Jni 
 + * Method: ​   sumArray 
 + * Signature: ([I)I 
 + */ 
 +JNIEXPORT jint JNICALL Java_jni_1pkg_Jni_sumArray 
 +  (JNIEnv *, jobject, jintArray);​ 
 + 
 +/* 
 + * Class: ​    ​jni_pkg_Jni 
 + * Method: ​   initCppObj 
 + * Signature: ()I 
 + */ 
 +JNIEXPORT jint JNICALL Java_jni_1pkg_Jni_initCppObj 
 +  (JNIEnv *, jobject); 
 + 
 +/* 
 + * Class: ​    ​jni_pkg_Jni 
 + * Method: ​   deleteCppObj 
 + * Signature: ()I 
 + */ 
 +JNIEXPORT jint JNICALL Java_jni_1pkg_Jni_deleteCppObj 
 +  (JNIEnv *, jobject); 
 + 
 +/* 
 + * Class: ​    ​jni_pkg_Jni 
 + * Method: ​   changeCppObjField 
 + * Signature: (I)I 
 + */ 
 +JNIEXPORT jint JNICALL Java_jni_1pkg_Jni_changeCppObjField 
 +  (JNIEnv *, jobject, jint); 
 + 
 +/* 
 + * Class: ​    ​jni_pkg_Jni 
 + * Method: ​   callMe 
 + * Signature: ()V 
 + */ 
 +JNIEXPORT void JNICALL Java_jni_1pkg_Jni_callMe 
 +  (JNIEnv *, jobject); 
 + 
 +#ifdef __cplusplus 
 +
 +#endif 
 +#endif 
 + 
 + 
 + 
 +</​code>​
  
  
jni.txt · ostatnio zmienione: 2008/04/16 23:55 przez chappaai