AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

JNI gesucht

Ein Thema von Luckie · begonnen am 5. Sep 2006 · letzter Beitrag vom 18. Okt 2006
Antwort Antwort
Seite 2 von 5     12 34     Letzte »    
kalmi01
(Gast)

n/a Beiträge
 
#11

Re: JNI gesucht

  Alt 5. Sep 2006, 13:41
Hi Luckie,

vielleicht hilft Dir ja das weiter.
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#12

Re: JNI gesucht

  Alt 5. Sep 2006, 13:42
Das Problem kenne ich auch noch, unser Rückfallnetz besteht aus zwei ISDN Kanälen, entsprechend perfomant geht es dann voran (es müssen sich halt nur genug Leute 128 KBit teilen). Da war es dann auch immer schneller Dinge woanders runterzuladen und dann am nächsten Tag weiter zu machen. Aber im Moment wird mal keine Leitung durch Bagger zerstört und das Netz ist schnell (>>> 128 KBit).
Andererseits würde ich mich auch gern mal dafür bezahlen lassen

[edit]
@kalmi01 Ohne für Luckie sprechen zu wollen sprach er davon, dass er C verwenden möchte. Da man in letzter Zeit häufiger Luckie und C im selben Thread trifft dürfte er auch wirklich was in C machen wollen
[/edit]
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#13

Re: JNI gesucht

  Alt 5. Sep 2006, 14:27
So, soweit scheint es zu funktionieren. Bis auf eine Fehlermeldung vom Linker: "undefined reference to `JNI_JNI_CreateJavaVM'". Muss ich da noch irgendwie eine lib-Datei linken oder so?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#14

Re: JNI gesucht

  Alt 5. Sep 2006, 14:32
Nein, aber du musst das include Verzeichnis komplett in deine C Umgebung (per Include Schalter) einbinden. Eigentlich sollte dann alles klappen. Andererseits heißt das ja in der Regel nicht viel.

[edit]
Achso, im Include Verzeichnis gibt es noch ein weiteres Systemspezifisches Verzeichnis, dass du auch in den Include pfad packen musst.
[/edit]
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#15

Re: JNI gesucht

  Alt 5. Sep 2006, 14:41
Hm:
Code:
-I"C:\Programme\Java\jdk1.5.0_07\include\*" -I"C:\Programme\Java\jdk1.5.0_07\include\win32\*" -O0 -g3 -Wall -c -fmessage-length=0
Ändert leide rnichts an der Fehlermeldung. Der Compiler gibt allerdings schon eine warnung auis:
Zitat:
implicit declaration of function `JNI_JNI_CreateJavaVM'
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#16

Re: JNI gesucht

  Alt 5. Sep 2006, 15:30
Ok,
ehrlich gesagt wundert es mich, dass der von dir gepostete C Code so überhaupt laufen sollte.
Ich hab mal die Datei etwas abgeändert (bei mir fehlten 2 schließende Blöcke und die vmArgs müssen vom Typ JvmInitArgs sein).

Code:
#include <stdio.h>
#include "jni.h"

int main()

   JavaVMOption options[1];
   JNIEnv *env;
   JavaVM *jvm;
   JavaVMInitArgs 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;
}
Das ganze hab ich dann durch den Borland C Compiler gejagt :
Code:
bcc32 -I"C:\Programme\Java\jdk1.5.0_08\include" -I"C:\Programme\Java\jdk1.5.0_08\include\win32" "Blubb.c"
Und das compiliert ohne Probleme. Gelinkt habe ich den Code jetzt zwar nicht, aber ich denke mal die Probleme hattest du auch schon beim Compilieren?
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#17

Re: JNI gesucht

  Alt 5. Sep 2006, 15:45
Wenn ich deinen Code mit MinGW kompiliere, bekomme ich folgende Fehlermeldungen:
Code:

**** Full rebuild of configuration Debug for project Direct Soap Bridge Exe Demo ****

mingw32-make clean all
rm -rf ./ExeDemo.o ./ExeDemo.d DirectSoapBridgeExeDemo.exe
process_begin: CreateProcess((null), rm -rf ./ExeDemo.o ./ExeDemo.d DirectSoapBridgeExeDemo.exe, ...) failed.
make (e=2): Das System kann die angegebene Datei nicht finden.

mingw32-make: [clean] Error 2 (ignored)
' '
'Building file: ../ExeDemo.c'
'Invoking: GCC C Compiler'
mingw32-gcc -I"C:\Programme\Java\jdk1.5.0_07\include" -I"C:\Programme\Java\jdk1.5.0_07\include\win32" -O0 -g3 -Wall -c -fmessage-length=0 -oExeDemo.o ../ExeDemo.c
../ExeDemo.c: In function `main':
../ExeDemo.c:16: warning: implicit declaration of function `memset'
../ExeDemo.c:29: warning: int format, jint arg (arg 2)
../ExeDemo.c:36:2: warning: no newline at end of file
'Finished building: ../ExeDemo.c'
' '
'Building target: DirectSoapBridgeExeDemo.exe'
'Invoking: GCC C Linker'
mingw32-gcc -oDirectSoapBridgeExeDemo.exe ./ExeDemo.o  
./ExeDemo.o(.text+0x75): In function `main':
D:/Projekte Datawerk/PVS/SVN/branches/Eclipse_mp/Direct_SOAP_Bridge_DLL/JNI/C-Programm/Debug/../ExeDemo.c:20: undefined reference to `_imp__JNI_CreateJavaVM@12'
collect2: ld returned 1 exit status
mingw32-make: *** [DirectSoapBridgeExeDemo.exe] Error 1
Build complete for project Direct Soap Bridge Exe Demo
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#18

Re: JNI gesucht

  Alt 5. Sep 2006, 15:54
Hm, sorry, mit minGW kenne ich mich jetzt nicht wirklich aus. Also bei Cygwin konnte man nie direkt auf ein Verzeichnis zugreifen. Da musste man den Umweg über das virtuelle Verzeichnis cyIrgendwas (nicht mehr im Kopf) gehen. Aber das sollte hier nicht das Problem sein. Vielmehr stellt dir minGW doch eine andere (unix) Umgebung zur Verfügung. Da weiß ich nicht in wie weit die Bibliotheken aus ...\include\win32 verwendet werden können. Hier sind immerhin plattformabhängige Aufrufe und Deklarationen drin. Daran kann es also (mit dem Compiler) scheitern. Hast du es einfach nur mit einem "normalen" C Compiler versucht? (mache ja schließlich auch gerne Fehler!)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#19

Re: JNI gesucht

  Alt 5. Sep 2006, 15:56
Das ist die Windows Version des Compilers. Ich habe damit schon erfolgreich normale Exe-FDateien, wie auch DLLs kompilieren können. Und was ist ein "normaler" C-Compiler?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#20

Re: JNI gesucht

  Alt 5. Sep 2006, 17:33
Ok, hab wohl nicht mitbekommen, dass MinGW einfach eine echt Portierung ist. Dachte ist nur minimaler als Cygwin aber wieder mit DLL die beiliegen muss. Gut, dann nehme ich auch das zurück.

Das Problem dass du hast, habe ich beim Linken auch (ich hätte nicht nur compilieren sollen). Es liegt daran, dass das Erzeungen der JVM nicht gelinkt werden kann. Statisch ist dies auch nicht möglich, da du auf jedem System die jvm an einem anderen Ort finden wirst. Du musst die Methode JNI_CreateJavaVM gegen die jvm.dll linken. Hier kann ich dir leider nichts genaueres sagen (mit meinem C ist's nicht all zu weit her).
Du findest aber eine Delphi Implementierung, wie man diese Dll lädt und eine neue Instanz erzeugt, die dir weiterhelfen dürfte. Ich möchte hier nur auf den Download JavaGoesDelphi verweisen. In der .zip Datei findest du in der JNI.pas in Zeile 2467 die richtige Mehtode. Wie gesagt, mit meinem C ist es für eine Entsprechung nicht weit genug her. Damit solltest du sich dein Problem erübrigen (sehen wir von den Warnings ab).

Der Ort, andem du die jvm.dll findest ist in der Registry unter HKLM\Software\JavaSoft\Java Runtime Environment\1.x als Runtimelib zu finden (bei einer Standard Sun JVM). Welches JRE du hier verwendest bleibt natürlich dir überlassen (soweit mehr als eins installiert ist).

Ja, dann hoffe ich du kommst damit auch weiter,

Gruß Der Unwissende
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 5     12 34     Letzte »    


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:00 Uhr.
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