Delphi-PRAXiS
Seite 3 von 5     123 45      

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 20:02

Re: JNI gesucht
 
Danke, ich werde es morgen an der Arbeit ausprobieren.

Luckie 6. Sep 2006 08:58

Re: JNI gesucht
 
Zitat:

Zitat von Der_Unwissende
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.

Und warum wird das in den Beispielen nie gemacht? Also scheint es doch auch statisch irgendwie funktionieren zu müssen.

Zitat:

Du musst die Methode JNI_CreateJavaVM gegen die jvm.dll linken.
Mal sehen, ob ich das hinbekomme.

Der_Unwissende 7. Sep 2006 13:21

Re: JNI gesucht
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hi,
ich war mal so frei, mich ein wenig an C zu probieren. Bitte keine Kommentare dazu, dass man das alles besser und schöner hätte machen können, sehe ich genauso, aber wie gesagt C und ich sind nicht die besten Freunde. Da ist mir schon C++ sympatischer (kann man wenigstens Objekte verwenden).
Na ja, jedenfalls klappt das so bei mir ohne Probleme.
Hier wird zur Laufzeit der Pfad zur DLL ermittelt und hier dynamisch die Methode geladen. Da du selbst viel mit der Windows-API gearbeitet hast und auch C kannst, sollte alles für dich verständlich sein. Insbesondere solltest du schauen, ob ich überhaupt sauber den Speicher freigebe, den ich verwende.
Ups, da fällt mir gerade ein, ich verwende an einer Stelle ein calloc, da sorge ich wirklich nicht für die Freigabe, peinlich.

Na ja, wäre schon mal die erste Stelle, die du korrigieren kannst :wink:

Gruß Der Unwissende

Luckie 7. Sep 2006 13:25

Re: JNI gesucht
 
Besten Dank. Ich habe es in der Zwischenzeit mit Delphi probiert. Mal sehen, wenn der Chef einsichtig ist, kan nich dabei bleiben. ;)

Der_Unwissende 7. Sep 2006 15:11

Re: JNI gesucht
 
Zitat:

Zitat von Luckie
Besten Dank. Ich habe es in der Zwischenzeit mit Delphi probiert. Mal sehen, wenn der Chef einsichtig ist, kan nich dabei bleiben. ;)

Hatte ich ja gesehen (hatte glaube ich auch auf den anderen Beitrag geantwortet, bin mir nicht sicher, hatte das Semikolon geholfen?)
Jedenfalls ist das hier eh der Punkt, ab dem ich dir von C abraten würde, env und jvm enthalten Zeiger auf Objekte, da kannst du dann deinem Chef auch sagen, dass du eh nicht um eine OO Sprache rum kommst (nicht wirklich schön jedenfalls) und dazu fällt mir nur ein:
Zitat:

Zitat von Alan Kay
Ich habe den Ausdruck »objektorientiert« eingeführt und kann Ihnen versichern, dass ich dabei nicht an C++ gedacht haben.


Luckie 9. Sep 2006 01:10

Re: JNI gesucht
 
Na ja, was das mal werden soll, kannst du hier nachlesen: http://www.michael-puff.de/Developer...lloWorld.shtml

Ich muss das dann noch irgendwie an die xfire Schnittstelle des Webserviceses dranklemmen. Und dann soll die DLL noch universell einsetzbar sein, also nicht auf einen Webservice speziell zugeschnitten ein. Das wird noch richtig lustig. :wall:

Luckie 11. Sep 2006 09:53

Re: JNI gesucht
 
Ich habe mir mal deine Test-C-Dateien angeguckt. Wie nutze ich diese jetzt?

Der_Unwissende 11. Sep 2006 10:12

Re: JNI gesucht
 
Wie meinst du das denn?
Also wenn du bei dir das Programm übersetzen und linken kannst, bekommst du eine .exe die beim Start einfach eine JVM und ein JniEnvironment erzeugt. Das ist auch so ziemlich alles, was du brauchst. Die Funktionen (die du in der Doku und in der JNI.pas) findest, kannst du damit "wie gewohnt" aufrufen.
Du hast ja grob soetwas:
Code:
jfieldID GetFieldID(JNIEnv *env, jclass clazz, const char *name, const char *sig);
Dabei ist dann clazz natürlich schon gültig und über findClass gesucht worden, dann ist dir hier nun alles bekannt und du bekommst eine gültige FielId. Mittels dieser kannst du dann die Fuktion get<T>Field aufrufen, wobei T dann der Datentyp ist, also z.B. getIntField.

Ja, das war's dann.

Luckie 11. Sep 2006 12:12

Re: JNI gesucht
 
Ich habe jetzt deine Funktionen genommen und bei mir in das Programm eingebaut, sprich reinkopiert. Den entsprechenden Aufruf habe ich angepasst:
Code:
status = createJavaVm(jvm, env, &path[0]);
Leider bekomme ich dieses Windows Fenster zu sehen: "foobar.exe hat ein Problem festgestellt und muss beendet werden." Ich kann aber im Moment noch nicht sagen, woran es liegt, da ich noch nicht rausgefunden habe, wie man mit Eclipse debuggt. Bzw. wenn ich es versuche, bekomme ich von Eclipse die Meldung: "Launching failed", mit de rich im Moment nochnichts anfangen kann.

Der_Unwissende 11. Sep 2006 12:46

Re: JNI gesucht
 
Was genau hast du denn angepasst?
Also lässt du immer noch den Pfad über die Registry ermitteln? Ist Path dann gültig? (also auch der Wert, einfach mal ausgeben).

Ja, könnte jetzt nur gut weiterraten, aber das hilft ja dann auch nicht viel. Läuft denn das Programm das ich dir geschickt hatte überhaupt? Wenn ja, dann lager doch den Teil, den du brauchst aus (würde ich dir eh empfehlen). Leg dann eine Methode an, die die JVM und das JniEnv erzeugt (und eine die es auch wieder frei gibt). Ja, mit C++ oder Delphi hast du da immer noch klare Vorteile (was hat dein Chef an denen auszusetzen?!).

Jedenfalls kann ein solcher Fehler an mehreren Dingen liegen (etwas fuzzy und vielleicht nicht vollständig oder richtig):
  • Pfad zur Dll ist ungültig
  • jvm oder env sind ungültig, hier ist es wichtig nicht einen Zeiger auf einen Zeiger oder so zu übergeben sondern den Zeiger auf die JavaVM Struktur bzw. das JNIEnv.
  • Deine jvm ist irgendwo lokale Variable, dann wird die mit dem verlassen der Methode auch aufgeräumt...

Wären jetzt so die ersten Punkte die mir einfallen. Musst du mal schauen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:42 Uhr.
Seite 3 von 5     123 45      

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