Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Eine Dll die Java braucht, in Delphi (https://www.delphipraxis.net/136252-eine-dll-die-java-braucht-delphi.html)

Corelgott 26. Jun 2009 12:03


Eine Dll die Java braucht, in Delphi
 
Hi @ all,

ich habe eine seltsame konstellation: Ich habe eine Hardware, deren Treiber die JRE 6.0_13 oder neuer braucht... Da die Software aber portabel sein soll, möchte ich gerne die JRE beilegen. Gerne in einen Unterordner. Aber wie sage ich das der DLL? Also wie passe ich den suchpfad meiner eigenen EXE an bzw. interessiert dass dann auch die dll?

Aller besten Dank im Vorraus!

Gruß

Corelgott

mjustin 26. Jun 2009 17:09

Re: Eine Dll die Java braucht, in Delphi
 
Zitat:

Zitat von Corelgott
Hi @ all,

ich habe eine seltsame konstellation: Ich habe eine Hardware, deren Treiber die JRE 6.0_13 oder neuer braucht... Da die Software aber portabel sein soll, möchte ich gerne die JRE beilegen. Gerne in einen Unterordner. Aber wie sage ich das der DLL? Also wie passe ich den suchpfad meiner eigenen EXE an bzw. interessiert dass dann auch die dll?

Was ist "Eine Dll die Java braucht" - ist es eine, die zum Java Runtime Environment gehört, oder ist es eine in Delphi geschriebene DLL, die über JNI (oder JNA) angesprochen werden soll?

Corelgott 26. Jun 2009 19:50

Re: Eine Dll die Java braucht, in Delphi
 
es ist eine closed source 3rd party dll, vermutlich c / c++ die eine api zur verfügung stellt, um mit einer usb-box zu reden. Der "Treiber" / die Api benötigt aber die jre. Ich habe keine direkte Ahnung warum, dass müsste dann der Hersteller beantworten. Deren Aussage ist aber soviel wie: Der der das gemacht hat war ein Freelancer und ist mehr verfügbar. Somit ist das ganze "provided as is" mit einer menge Bugs.

(So tolle Sachen wie z.B.: um die Serial eines devices zu bekommen übergibt man eine 30 Zeichen PChar; Laut api; Leider ballert die api nicht nur 30 Chars rein sonder 4012 (!) somit sollte man ein bissel mehr Speicher reservieren... Habe doch etwas länger gesucht, da dieses verhalten nur bei einer bestimmen Serie auftritt)

Lange rede kurzer sinn: Eine schlecht geschriebene close source dll die intern auf die JRE zurückgreift.

mjustin 27. Jun 2009 08:52

Re: Eine Dll die Java braucht, in Delphi
 
Zitat:

Zitat von Corelgott
Lange rede kurzer sinn: Eine schlecht geschriebene close source dll die intern auf die JRE zurückgreift.

Die Frage ist nun, wenn ich es richtig verstehe: "Wie findet die DLL die JRE?"

Drei Möglichkeiten fallen mir ein:
* die DLL schaut in der Registry nach (HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment) - hier können auch mehrere JRE's stehen
* die DLL schaut im PATH nach (ist eher unwahrscheinlich)
* die DLL liest aus einer Konfigurationsdatei, einer Umgebungsvariable oder einer anderen Informationsquelle, die von dem Treiberpaket bei der Installation hinterlegt wird

Durch Probieren könnte man die ersten beiden Möglichkeiten leicht prüfen (Ändern der PATH EInstellung oder des Registry Keys). Umgebungsvariablen kann man auch leicht prüfen, einen Registrykey des Treibers könnte man mit etwas Glück finden.

Ich würde auch prüfen, ob es wirklich die DLL ist, die die JRE aufruft. Wenn sie eine eigene JVM startet und mit ihr über JNI kommuniziert, müßte man das im Taskmanager sehen können (Java Prozess vorhanden?). Wenn der Java Prozess aber schon zu sehen ist, bevor die DLL geladen wurde, ist es vermutlich umgekehrt - Java ruft DLL.

Corelgott 27. Jun 2009 19:55

Re: Eine Dll die Java braucht, in Delphi
 
Hi,

erst mal Danke für deine Antwort! Du hast das Problem genau richtig erfasst!

Also ich habe das mit den Enviroment-Vars schon vorher testet... Das interressiert sie schlicht nicht... Was mir da gerade einfällt, dass ich immer nur an PATH herrumgeschraubt habe... nicht aber an Class-Path... das war doch das extra ding von java... (Werde ich nochmal testen)

Das er es über die Registry macht kann sein... Obwohl ich das für eher unwarscheinlich halte. Ist aber definitiv einen versuch wert.
Was den Prozess angeht: Ich habe weder mit dem Taskmanager, noch mit dem ProcessExporer von Sysinternals einen passenden Prozess gefunden! Auch über mit dem Dependancy-Walker konnte ich nichts finden, was auf eine Java-Komponenten hinweist... Auf mit dem DiskMon von Sysinternals habe ich keine Java Dll gefunden...

Und nun wird's seltsam... Wenn kein Java installiert ist, bekomme ich keinerlei daten vom Treiber. Sowie ich Java installiere ist alles in Ordnung. (Am Live-System habe ich den Effekt gesehen, in einer Virtual getestet (Sauberes Xp Sp3 - kein Java & dann mit)) Zu dem Treiber gehört auch eine JAR datei (Bitte verbessern falls ich da falsch liege: Jar = Ein Java Archiv, dass mehere Java-Bytecode-Classes, Resource usw enthalten kann. Vergleichbar mit einer .app bei osx)

Also irgendwas übersehe ich bei der ganzen sache... Ohne Java geht es nicht... Aber wenn java installiert ist, entsteht kein java-prozess? Kann es sein, dass die DLL intern schon eine Art Java-VM läd (JNI)?

Alles sehr seltsam... Für ideen, wo ich überhaupt erst noch gucken kann wäre ich sehr dankbar!
Ich werde erst mal versuchen das teil weiter zu "zerstückeln"...

Gruß & Danke für's bisherige Nachdenken!
In der Hoffnung aus weitere Ideen...

Corelgott

Apollonius 28. Jun 2009 09:52

Re: Eine Dll die Java braucht, in Delphi
 
Wahrscheinlich verwendet diese DLL tatsächlich die Invocation API (sozusagen Reverse JNI). Wenn Java installiert ist, müsste der Treiber eine Java-DLL laden (möglicherweise kannst du das mit diversen Programmen auch sehen - ich kenne mich mit solchen Werkzeugen nicht wahnsinnig gut aus). Den Pfad wird er höchstwahrscheinlich aus der Registry nehmen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:21 Uhr.

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