AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Eine Dll die Java braucht, in Delphi
Thema durchsuchen
Ansicht
Themen-Optionen

Eine Dll die Java braucht, in Delphi

Ein Thema von Corelgott · begonnen am 26. Jun 2009 · letzter Beitrag vom 28. Jun 2009
Antwort Antwort
Benutzerbild von Corelgott
Corelgott

Registriert seit: 11. Apr 2003
Ort: Lübeck
213 Beiträge
 
Delphi 2006 Enterprise
 
#1

Eine Dll die Java braucht, in Delphi

  Alt 26. Jun 2009, 13:03
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
wer Rächtschraibfehler findet daaf sie behalten...
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.006 Beiträge
 
Delphi 2009 Professional
 
#2

Re: Eine Dll die Java braucht, in Delphi

  Alt 26. Jun 2009, 18:09
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?
Michael Justin
habarisoft.com
  Mit Zitat antworten Zitat
Benutzerbild von Corelgott
Corelgott

Registriert seit: 11. Apr 2003
Ort: Lübeck
213 Beiträge
 
Delphi 2006 Enterprise
 
#3

Re: Eine Dll die Java braucht, in Delphi

  Alt 26. Jun 2009, 20:50
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.
wer Rächtschraibfehler findet daaf sie behalten...
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.006 Beiträge
 
Delphi 2009 Professional
 
#4

Re: Eine Dll die Java braucht, in Delphi

  Alt 27. Jun 2009, 09:52
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.
Michael Justin
habarisoft.com
  Mit Zitat antworten Zitat
Benutzerbild von Corelgott
Corelgott

Registriert seit: 11. Apr 2003
Ort: Lübeck
213 Beiträge
 
Delphi 2006 Enterprise
 
#5

Re: Eine Dll die Java braucht, in Delphi

  Alt 27. Jun 2009, 20:55
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
wer Rächtschraibfehler findet daaf sie behalten...
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Eine Dll die Java braucht, in Delphi

  Alt 28. Jun 2009, 10:52
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.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Antwort Antwort


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 16:16 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