Delphi-PRAXiS
Seite 1 von 5  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   JNI gesucht (https://www.delphipraxis.net/76478-jni-gesucht.html)

Luckie 5. Sep 2006 10:05


JNI gesucht
 
Ich muss mit einem C-Programm eine Java Methode aufrufen. das geht mit JNI (Java Native Interface). Doch wo bekomme ich die jni.h Datei und alles, was ich sonst noch so dazu brauche? Ich habe schon dne ganzen Morgen gegoogelt, aber irgendwie keinen Download gefunden. :gruebel:

Daniel B 5. Sep 2006 10:07

Re: JNI gesucht
 
You've got mail.

Der_Unwissende 5. Sep 2006 10:39

Re: JNI gesucht
 
Hi,
ich kann dir hier nur die Seite SUN empfehlen. Möchte hier nicht einfach nur auf den hersteller verweisen, aber du findest dort das SDK und dessen Doku und Letzteres ist echt gut geschrieben. Gerade JNI fand ich sehr gut behandelt. Jedenfalls findest du dort auch alle Möglichkeiten und die Umsetzung in C (und die verwendeten Datentypen usw.).

Gruß Der Unwissende

Luckie 5. Sep 2006 11:47

Re: JNI gesucht
 
Ich habe jetzt folgendes Java Programm:
Code:
public class HelloWorld {
    public static void main(String[] argv) throws Exception
    {
       HelloWorld test = new HelloWorld();
       int res = test.Test();
       
       System.in.read();
       
       System.out.print(res);
    }
   
    public int Test()
    {
       System.out.print("Hello, world\n");
       return 42;
    }
}
Dazu das C-Programm:
Code:
#include <stdio.h>
#include "jni.h"

int main()
{
   JavaVMOption options[1];
   JNIEnv *env;
   JavaVM *jvm;
   JDK1_1InitArgs vm_args;
   long status;
   jclass cls;
   jmethodID mid;
   jint square;
   jboolean not;

   options[0].optionString="-Djava.class.path=.";
   memset(&vm_args, 0, sizeof(vm_args));
   vm_args.version = JNI_VERSION_1_2;
   vm_args.nOptions = 1;
   vm_args.options = options;
   status = JNI_CreateJavaVM(&jvm,(void**)&env,&vm_args);

   if (status != JNI_ERR)
   {
      cls = (*env)->FindClass(env, "HelloWorld");
      if (cls != 0)
         {mid = (*env)->GetStaticMethodID(env,cls,"Test","(I)I");
      if (mid != 0)
         {square = (*env)->CallStaticIntMethod(env,cls,mid,5);
      printf("Result of int Method:%d\n", square);

      (*jvm)->DestroyJavaVM(jvm);
      return 0;
   }
   else
      return -1;
}
#include <stdio.h>
#include "jni.h"

int main()
{
   JavaVMOption options[1];
   JNIEnv *env;
   JavaVM *jvm;
   JDK1_1InitArgs vm_args;
   long status;
   jclass cls;
   jmethodID mid;
   jint square;
   jboolean not;

   options[0].optionString="-Djava.class.path=.";
   memset(&vm_args, 0, sizeof(vm_args));
   vm_args.version = JNI_VERSION_1_2;
   vm_args.nOptions = 1;
   vm_args.options = options;
   status = JNI_CreateJavaVM(&jvm,(void**)&env,&vm_args);

   if (status != JNI_ERR)
   {
      cls = (*env)->FindClass(env, "HelloWorld");
      if (cls != 0)
         {mid = (*env)->GetStaticMethodID(env,cls,"Test","(I)I");
      if (mid != 0)
         {square = (*env)->CallStaticIntMethod(env,cls,mid,5);
      printf("Result of int Method:%d\n", square);

      (*jvm)->DestroyJavaVM(jvm);
      return 0;
   }
   else
      return -1;
}
Nur leider erkennt er die Datentypen JavaVMOption und JavaVMInitArgs nicht. Sie sind auch nicht in der jni.h datei zu finden. Den Code hab eich zwei PDFs. Lider wird da nicht gesagt, welche jni.h Datei verwendet wird.

Der_Unwissende 5. Sep 2006 12:02

Re: JNI gesucht
 
Die jni.h findest du im JDK im include Verzeichnis. Die enthält (zumindest im JDK 1.5) auf jedenfall auch die Datentypen.

Gruß Der Unwissende

Luckie 5. Sep 2006 12:05

Re: JNI gesucht
 
Ist das richtig, dass das JDG ca. 123 MB groß ist? dann dauert das noch eine Weile, bis ich das habe. :?

Der_Unwissende 5. Sep 2006 12:09

Re: JNI gesucht
 
JDG? Also das JDK ist im Download so in der Größe, auf der Platte gut 250 MByte, schon das JRE ist um die 130 MByte groß.
Ohne schnelle Leitung macht da Java auch gar keinen Spaß!

Gruß Der Unwissende

Luckie 5. Sep 2006 12:19

Re: JNI gesucht
 
Ja, JDK meine ich: java_ee_sdk-5-windows.exe

Der_Unwissende 5. Sep 2006 12:37

Re: JNI gesucht
 
Hm,
brauchst du wirklich die EE (Enterprise Edition?). Also Java unterscheidet hier die MicroEdition (für den Embedded Bereich gedacht, abgspeckter Funktionsumfang), die J2SE (Standard Edition), wird in der Regel als JDK bezeichnet und die J2EE (Enterprise Edition).
Letztere enthält eine Menge an Enterprise Logik. Da kommen dann EnterpriseBeans zum Einsatz. Diese laufen in einer speziellen Umgebung (in einem Container). Die ermöglicht halt Skalierungen und Sicherheitsfeatures und nimmt dir komplett die Logik der Nebenläufigkeit ab (und und und). Dazu musst du die aber auch in einer Implementierung eines EE-Servers laufen lassen (Stichwort JBoss u.A.).

Für die sollte eigentlich die J2SE reichen (wenn du nur Java + JNI verwenden möchtest).

Luckie 5. Sep 2006 12:38

Re: JNI gesucht
 
Habe ich auch gerade gemerkt. Ich lade mir jetzt die SE Version runter. Werde ja dafür bezahlt, dass ich dem Download zu gucke. ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:04 Uhr.
Seite 1 von 5  1 23     Letzte »    

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz