Galileo Computing < openbook > Galileo Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger

Java ist auch eine Insel von Christian Ullenboom
Programmieren für die Java 2-Plattform in der Version 5 (Tiger-Release)
Buch: Java ist auch eine Insel
gp Kapitel 23 Java Native Interface (JNI)
  gp 23.1 Java Native Interface und Invocation-API
  gp 23.2 Die Schritte zur Einbindung einer C-Funktion in ein Java-Programm
    gp 23.2.1 Schreiben des Java-Codes
    gp 23.2.2 Compilieren des Java-Codes
    gp 23.2.3 Erzeugen der Header-Datei
    gp 23.2.4 Implementierung der Methode in C
    gp 23.2.5 Übersetzen der C-Programme und Erzeugen der dynamischen Bibliothek
    gp 23.2.6 Setzen der Umgebungsvariable
  gp 23.3 Erweiterung unseres Programms
  gp 23.4 Erweiterte JNI-Eigenschaften
    gp 23.4.1 Klassendefinitionen
    gp 23.4.2 Zugriff auf Attribute


Galileo Computing

23.3 Erweiterung unseres Programmtoptop

Wir haben unsere Funktion noch nicht zu Ende geführt. Es fehlt die Berechnung der Zeichenkettenlänge. Dazu müssen wir den String zuerst von der Unicode-Implementierung in ein C-Zeichenfeld überführen. Dazu dient eine Funktion GetStringUTFChars, die wir über die Umgebung env nutzen können.


jbyte* str = env->GetStringUTFChars( s, NULL );

Die Zeichenkettenlänge liefert die Funktion strlen(), die im Header string.h definiert ist:


#include <jni.h>
#include <stdio.h>
#include <string.h>
#include "strlen.h"

JNIEXPORT jint JNICALL Java_StrLen_strlen( JNIEnv *env, jclass clazz, jstring s )
{
//  printf( "Hallo Java-Freunde!\n" );

  if ( s == NULL )
  {
    jclass exc = env->FindClass( "java/lang/NullPointerException" );

    if ( exc != NULL )
      env->ThrowNew( exc, "(in C++ code)" );

    return1;
  }

  const jbyte* str = env->GetStringUTFChars( s, NULL );

  if ( str == NULL )
    return1;

  int len = strlen( str );

  env->ReleaseStringUTFChars( s, str );

  return (jint) len;
}

Mit dem JNI lassen sich unter C Java-Objekte erzeugen und zerstören, es kann auf Java-Methoden zugegriffen und Parameter können ausgetauscht werden. Wir nutzen das, um ein Ausnahme-Objekt zu erzeugen, wenn es keine Referenz auf ein String-Objekt gibt.

Eine intensivere Auseinandersetzung mit diesem Thema findet sich auf den Web-Seiten von Sun unter http://java.sun.com/docs/books/tutorial/native1.1/.





Copyright © Galileo Press GmbH 2004
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


[Galileo Computing]

Galileo Press GmbH, Gartenstraße 24, 53229 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, info@galileo-press.de