JNI LoadLibrary()

Status
Nicht offen für weitere Antworten.

Dozor

Mitglied
Hallo Leute,

ich versuch direkt auf den Punkt zu kommen.

Habe ein Programm geschrieben was mit JNI und co arbeitet...
für JNI muss man ja nun die DLLs laden mit System.loadLibrary("Meine.dll");
Das doofe ist nun kann es mal sein das die Meine.dll auf den Rechner wo das Programm ausgeführt wird
ist mindestens EINMAL die DLL vorhanden in einigen sonderfällen kommt Sie aber auch
2- oder noch mehr-mal vor.

zB. : Meine.dll unter C:\WINDOWS\
Meine.dll unter C:\Programm Files\MeinProg\

Nun zu meiner Frage:

:?: Wie kann ich herrausfinden von welchem Pfad die DLL mit System.loadLibrary("Meine.dll") geladen wurde, :?:
:?: ohne dabei auf System.load("C:\WINDOWS\Meine.dll") zurückgreifen zu müssen? :?:

Denn es ist nicht sichergestellt das beide DLLs auf dem SELBEN entwicklungsstand sind.

Gruß Dozor
 

Janus

Bekanntes Mitglied
sauberste lösung: spendier deiner lib eine versionsnummer a la Meine15.dll und eine methode der art getVersion().

verschiedene entwicklungsstände, die zueinander nicht kompatibel sind, sollte man auch entsprechend kennzeichnen. dein code, der auf version X der lib basiert, prüft dann auch, ob die entsprechende version vorliegt und kann geeignete fehlerbehandlungen einleiten.
 

Wildcard

Top Contributor
Meiner Meinung nach ist die 'sauberste' Lösung ein OSGi Container in dem die passende native Lib im eigenen Bundle gekapselt wird.
 

Dozor

Mitglied
Das mit der Version klingt ja ganz net ausser das ich dann fast jedesmal nach einer nativen Änderung mein Java code anpassen müsste und um es dann wieder produktive zu bringen braucht man dann all den organisations Aufwand...
Denn derzeit ist schon alles drauf ausgelegt das ich sehr einfach die Native Lib per Software versorgung gleichzeitig auf sehr sehr viele Rechner drauf spiele /n kann.

Und über diese Versions geschichte währe da einfach immer noch zu viel aufwand um es Produktive gehen zu lassen.

Das mit dem OSGi Container habe ich noch nicht viel darüber gehört...
hatte schon mal wahrscheinlich ne änhliche Lösung gehabt wo ich einfach den JavaCode mit den Nativen Libs in ner Jar ausgeliefert habe und diese dann mit glück geladen hatte gab aber auch nicht immer die Sicherheit das auch wirklich die richtigen geladen wurden.

Aber auch bei der Lösung gab es zuviel Aufwand für die Produktion denn änderte man hier die Nativen Lib musste ich den JavaCode wieder ausliefern und Signieren und und und ...

Ich dachte mir da es über System Classe geladen wird das es da irgendwie nen weg gäbe wie man es wieder auslesen kann von wo genau ergeladen hat.

Habe aber bis Jetzt noch nichts gefunden was zur lösung beigetragen hat.
 

Janus

Bekanntes Mitglied
das mit den OSGi bundles ist im grunde auch eine art versionierung. nur kapselt dir das framework den ganzen krempel weg.
 

thE_29

Top Contributor
Tjo, das sind fast alle Frameworks ;)
Auch die können nicht zaubern!

Die Frage ist halt, ob es die Arbeit Wert ist sich in ein Framework einzulesen oder einfach eine Methode macht mit getVersonNR und beim Laden abfragt ob es zusammenpasst oder nicht ;)

Cool wäre ein System.unloadLibrary! Das vermisse ich eigentlich noch :(
 

Dozor

Mitglied
Das mit dem System.uploadLibrary :idea: währe auch wunderbar so hätte ich wenigstens nicht diese doofen
ClassLoaderExceptions: Lib ist bereits geladen... .

Ich versuch mal das nochmal mit dem getVersion und ner Property-Datei wo die zu erwartende Version drin steht ... .
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen


Oben