SlideServe
Menu
Préférences
© SlideServe · v2026

Interfaçage Java et C/C++

mandell avatar
18 diapositives · 302 Views · Oct 13, 2014

Interfaçage Java et C/C++. Présentation de Système Ecole : Ingénieurs 2000 Filière : Informatique & Réseaux Auteur : Cyril MOQUEREAU Année : 2001/2002. Plan d’étude. Le principe de fonctionnement Prise en main Les possibilités de la JNI

Interfaçage Java et C/C++ - slide 1
01 / 18Interfaçage Java et C/C++
1 / 17

Télécharger la présentation

Interfaçage Java et C/C++
Une image / un lien ci-dessous est fourni (tel quel) pour télécharger la présentation

Politique de téléchargement : le contenu du site vous est fourni TEL QUEL pour votre information et votre usage personnel ; il ne peut être vendu, concédé sous licence ni partagé sur d’autres sites sans l’accord de son auteur.Le contenu vous est fourni TEL QUEL, pour votre information et votre usage personnel uniquement. Téléchargez la présentation en cliquant sur ce lien. Lors du téléchargement, si vous ne parvenez pas à télécharger une présentation, l’éditeur a peut-être supprimé le fichier de son serveur.Pendant le téléchargement, si vous ne parvenez pas à obtenir une présentation, le fichier a peut-être été supprimé par l’éditeur.

F I N

Plus de contenu associé

Transcription de la présentation
  1. Interfaçage Java et C/C++ Présentation de Système Ecole : Ingénieurs 2000 Filière : Informatique & Réseaux Auteur : Cyril MOQUEREAU Année : 2001/2002

  2. Plan d’étude • Le principe de fonctionnement • Prise en main • Les possibilités de la JNI • Manipulation des Strings, des tableaux, objets Java, etc... • Les limites d ’utilisation • Portabilité, Efficacité, Sécurité

  3. I. Cas d’utilisation de la JNI • Accéder aux ressources système • Utiliser du code déjà implémenté • Coder une partie critique d ’un programme

  4. Présentation d’un exemple • Les objectifs : • Interfacer un programme Java avec du code C • Décomposer la réalisation • Observer les principes de base • Les étapes de réalisation : • 1. Réalisation d’un programme Java • 2. Création du fichier de prototypage • 3. Implémentation des méthodes natives • 4. Compilation / Exécution du programme

  5. 1ère étape : Réalisation du programme Java class HelloWorld { public native void displayHelloWorld(); static { System.loadLibrary("hello"); } public static void main(String[] args) { new HelloWorld().displayHelloWorld(); } }

  6. 2ème étape (1) : Création du fichier de prototypage 1. javac HelloWorld.java 2. javah HelloWorld • /* DO NOT EDIT THIS FILE - it is machine generated */ • #include <jni.h> • /* Header for class HelloWorld */ • #ifndef _Included_HelloWorld • #define _Included_HelloWorld • #ifdef __cplusplus • extern "C" { • #endif • /* • * Class: HelloWorld • * Method: displayHelloWorld • * Signature: ()V • */ • JNIEXPORT void JNICALL Java_HelloWorld_displayHelloWorld • (JNIEnv *, jobject); • #ifdef __cplusplus • } • #endif • #endif 3.

  7. 2ème étape (2) : L ’argument JNIEnv • Fonction :Interagir avec la JVM • Comportement : Pointeur sur GetFieldID Pointeur sur GetMethodID Pointeur sur FindClass … GetFieldID() GetMethodID() FindClass() JNIEnv *

  8. 3ème étape : Implémentation du code natif #include <jni.h> #include "HelloWorld.h" #include <stdio.h> JNIEXPORT void JNICALL Java_HelloWorld_displayHelloWorld( JNIEnv *env, jobject obj) { printf("Hello world!\n"); return; }

  9. 4ème étape : Compilation et Exécution • Compiler le code C (exemple sous Linux) : $ gcc -shared -I ./java/include \ –I ./java/include/linux HelloWorldImp.c -o libhello.so • Génère une librairie dynamique • Exécution du programme : $ java HelloWorld • Appel de la méthode native par : System.loadLibrary("hello");

  10. Les types primitifs de la JNI • Accès direct aux primitives Java • Passage des données de type primitif par valeur Java Type Native Type Size in bits Boolean Jboolean 8, unsigned Byte Jbyte 8 Char Jchar 16, unsigned Short Jshort 16 Int Jint 32 Long Jlong 64 Float Jfloat 32 Double Jdouble 64 Void Void n/a

  11. II. Les possibilités de la JNI • Passer des tableaux ou des chaînes de caractères • Interfacer un objet Java • Gérer des exceptions Java

  12. Passage d ’un objet Java (1 - Code Java) class MyJavaClass { public int aValue; public void divByTwo() { aValue /= 2; } } public class UseObjects { private native void changeObject(MyJavaClass obj); static { System.loadLibrary("UseObjImpl"); } public static void main(String[] args) { UseObjects app = new UseObjects(); MyJavaClass anObj = new MyJavaClass(); anObj.aValue = 2; app.changeObject(anObj); System.out.println("Java: " + anObj.aValue); } }

  13. Passage d ’un objet Java (2 - Code natif) #include <jni.h> extern "C" JNIEXPORT void JNICALL Java_UseObjects_changeObject( JNIEnv* env, jobject,jobject obj) { jclass clas = env->GetObjectClass(obj); jfieldID fid = env->GetFieldID(clas, "aValue", "I"); jmethodID mid = env->GetMethodID(clas, "divByTwo", "()V"); int value = env->GetIntField(obj, fid); printf("Native: %d\n", value); env->SetIntField(obj, fid, 6); env->CallVoidMethod(obj, mid); value = env->GetIntField(obj, fid); printf("Native: %d\n", value);}

  14. Signatures des types de la JVM Signature Type le langage Java Z boolean B byte C char S short I int J long F float D double

  15. III. Limites de la JNI • Perte de portabilité • Compilation  Rattachement à un système • Problèmes d’efficacité • Passages d ’information de la JNI vers la JVM • Faille de sécurité • Accès aux ressources systèmes

  16. Efficacité : graphe comparatif - rapide Code C Code Java +rapide C & Java

  17. Bilan d’étude • Des améliorations ont vu le jour entre 1.0, 1.1 et 1.2 • Solution à considérer en dernier recours • Possibilités de la version Java 1.4 • suppression de la pile liée au code natif • accès directe aux classes / méthodes C++

  18. Bibliographie • Ressources JNI • http://java.sun.com/docs/books/tutorial/native1.1 • http://developer.java.sun.com/developer/ • http://penserenjava.free.fr/pens/indexMain_18&00.htm • http://www.javaworld.com/jw-10-1998/jw-10-apptowin32.html #resources • Tests d ’efficacité • http://www.hyperactiveinc.com/tips.asp?tech=Java • http://www.str.com.au/jnibench/