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

 << zurück
Java ist auch eine Insel von Christian Ullenboom
Programmieren für die Java 2-Plattform in der Version 5
Java ist auch eine Insel

Java ist auch eine Insel
5., akt. und erw. Auflage
1454 S., mit CD, 49,90 Euro
Galileo Computing
ISBN 3-89842-747-1
gp Kapitel 24 Java Native Interface (JNI)
  gp 24.1 Java Native Interface und Invocation-API
  gp 24.2 Einbinden einer C-Funktion in ein Java-Programm
    gp 24.2.1 Schreiben des Java-Codes
    gp 24.2.2 Compilieren des Java-Programms
    gp 24.2.3 Erzeugen der Header-Datei
    gp 24.2.4 Implementierung der Methode in C
    gp 24.2.5 Übersetzen der C-Programme und Erzeugen der dynamischen Bibliothek
    gp 24.2.6 Setzen der Umgebungsvariable
  gp 24.3 Nativ die Stringlänge ermitteln
  gp 24.4 Erweiterte JNI-Eigenschaften
    gp 24.4.1 Klassendefinitionen
    gp 24.4.2 Zugriff auf Attribute
  gp 24.5 Links und Weiteres


Galileo Computing

24.3 Nativ die Stringlänge ermitteltoptop

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

jbyte* str = (*env)->GetStringUTFChars( envsNULL );

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

#include <jni.h>
#include "strlen.h"
#include <stdio.h>
#include <string.h>
JNIEXPORT jint JNICALL
Java_com_javatutor_jni_StrLen_strlen( JNIEnv *envjclass clazzjstring s )
{
  if ( s == NULL )
  {
    jclass exc = (*env)->FindClass( env"java/lang/NullPointerException" );
    if ( exc != NULL )
      (*env)->ThrowNew( envexc"(in C++ code)" );
    return –1;
  }
  const jbyte* str = (*env)->GetStringUTFChars( envsNULL );
  if ( str == NULL )
    return –1;
  int len = strlen( str );
  (*env)->ReleaseStringUTFChars( envsstr );
  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.

 << zurück




Copyright © Galileo Press GmbH 2005
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, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, info@galileo-press.de