![]() |
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 |
Re: Eine Dll die Java braucht, in Delphi
Zitat:
|
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. |
Re: Eine Dll die Java braucht, in Delphi
Zitat:
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. |
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 |
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