[JNI ]aus einer nativen DLL eine JAR-Datei erzeugen ??

VfL_Freak

Top Contributor
Guten morgen,
vorab: ich bin leider noch ein ziemlicher Anfänger, was derartige Aktionen mit Java angeht - habe bislang in einem übernommenen Projekt zumeist mit dem JBuilder2007 und einem fertigen build.xml gearbeitet. Seit zwei Wochen arbeite ich aber auch (parallel mit der "Eclipse IDE for Java Developers (Helios SR1)" ...

In dem genannten Projekt wird über ein JNI-Interface u. a. die MAC-Adresse und die Windows-ProductID ermittelt. Da dies unter Win7 nicht mehr funktionierte, musste ich entsprechende DLL mit C++ anpassen und neu erzeugen.
Habe ich die DLL nun lokal im workspace liegen, wird sie an der entspr. Stelle auch sauber geladen und ausgeführt. Um sie nun aber anderen Anwendern zur Vefügung zu stellen, benötige ich ja IMHO eine entsprechende JAR-Datei gleichen Namens, die diese DLL und eine entspr. Manifest-Datei enthält. Die Manifest-Datei " macaddrwin.mf" habe ich so aufgebaut:
Code:
Manifest-Version: 1.0
Main-Class: macaddrwin.dll

Wenn ich es richtig verstehe, muss ich ja nun beide Dateien in eine gleichnamige JAR-Datei packen und dann signieren (letzteres kann ich problemlos mit dem vorliegenden ant-Script machen).
Aber wie erzeuge ich nun die JAR-Datei ??
Bei meinem Versuch (analog zu den hier genannten Links) scheitern schon daran, dass ich im Export-Dialogs die DLL nicht als Quelle auswählen kann. Hier wird immer nur ein bestehendes Projekt verlangt ...

Kann man dies auch irgendwie von Hand machen über das CMD "jar" machen?

Ich hoffe, dass mir irgendwer hierbei weiterhelfen kann 🙂

Danke und Gruß
Klaus
 
Ehm.
Eine DLL ist eine Windows-Bibliothek und hat erst einmal nichts mit einer JAR zutun. Damit deine Programme nötige DLLs finden gibt man am besten den java.library.path an. Ich glaube den kann man auch ins Manifest schreiben.
Die DLL selbst ins JAR packen dürfte nicht gehen, da die DLL vom Betriebssystem geladen wird und im JAR liegt sie gezipt vor. Dazu gibts hier aber sogar einen anderen Thread.
 
Moin,

Ehm.
Eine DLL ist eine Windows-Bibliothek und hat erst einmal nichts mit einer JAR zutun. Damit deine Programme nötige DLLs finden gibt man am besten den java.library.path an. Ich glaube den kann man auch ins Manifest schreiben.
Die DLL selbst ins JAR packen dürfte nicht gehen, da die DLL vom Betriebssystem geladen wird und im JAR liegt sie gezipt vor. Dazu gibts hier aber sogar einen anderen Thread.

erstmal Danke für die schnelle Antwort.
Und ich merke schon, dass ich mich vlt. ein wenig unklar ausgedrückt habe .... 😱

Es geht mir im wesentlichen um eine JAR-Datei, die ich (signiert) auf den Webserver legen und dann über die JNLP mit zum jeweiligen Aufrufer runter laden kann. Von daher sollte sie auch tunlichst selbstentpackend sein ..... 😳
Bei der DLL handelt es sich ja um das JNI-Interface für die Java-Aufrufe der Betriebssystem-spezifischen Funktionen.
Das reine Erzeugen der JAR_Datei habe ich jetzt dank anderweitiger Unterstützung und ein wenig Fummelei erzeugen können! Scheinbar ist bei mir irgendein Pfad nicht richtig gesetzt - jedesfalls muss ich beide Quellen (dll und mf) ins bin-Verzeichnis des aktuellen JDKs packen und dann auch dort das JAR aufrufen.
Mit "jar cmf macaddrwin.mf macaddrwin.jar macaddrwin.dll" habe ich (bezüglich des Aufbaus) genau das Archiv bekomme, dass ich wollte.
Ob es nun wirklich selbstentpackend ist, will ich gleich mal testen 🙂

Gruß
Klaus
 
Es ist leider etwas arg lang her, dass ich was mit JNLP gemacht habe, aber ich bin mir ziemlich sicher, dass man im JNLP auch abhängige Resourcen die NICHT im JAR liegen angeben kann (gerade für DLLs gedacht).
Nur wie genau müsste man sich erlesen. Oder warten bis hier ein klügerer Mensch etwas dazu schreibt 🙂
 

Zurück
Oben