dll von Java aus ansprechen
-
Ich hab ne DLL, die ganz normale standard-C-Funktionen exportiert.
Diese DLL soll nun von Java aus angesprochen werden.
In allen Beispielen, die ich so finde im Netz, schreiben die aber die DLL extra fürs Beispiel, d.h. sie erzeugen sich die C-Funktion so, dass sie für Java passt:
Man schreibt die Java-Klasse, erzeugt sich mit
Javah -jni Test1
nen passenden C-Header
JNIEXPORT void JNICALL Java_Test1_inDll(JNIEnv *, jobject);
und implementieren dann die Funktionalität in C.
Ich hab aber hier den umgekehrten Fall. Die C-Funktionen existieren schon, und werden in der DLL mit irgendwelchen Aufrufkonventionen (stdcall) exportiert.
Im C-Projekt wird natürlich weder jni.h eingebunden, noch steht bei den Funktionen JNIEXPORT etc.Nachdem man diese DLL von allen anderen Programmiersprachen aus ansprechen kann, sollte das doch auch von Java aus gehen, ohne auf der C-Seite was ändern/anpassen zu müssen (oder ne extra Zwischen-DLL zu schreiben, die nix anderes macht, als die Funktionen der Original-DLL mit JNIEXPORT zu exportieren.
-
ohne viel darüber zu wissen, denke ich, du brauchst das...
Wrapperklassen
Nun noch einmal zurück zum Problem einer bereits existierenden Library und wie diese verwendet werden kann. Wie weiter oben schon angesprochen bedarf es nicht nur javaseitig einer geringfügigen Vorbereitung auf JNI sondern auch auf Seiten der Bibliothek. Wie kann das aber geschehen, wenn der Quellcode der Bibliothek nicht vorliegt ?Dazu liegt es nahe einfach eine Wrapperbibliothek zu schreiben, also eine Funktion, die über JNI Anfragen entgegennimmt und dann den eigentlichen Aufruf der vorgegebenen Bibliothek ausführt. Wenn ausser den Typkonvertierungen keine weitere Funktionalität in der Wrapperklasse eingebaut wird, erhält man einen transparenten Layer der einen Zugriff auf precompilierte Binaries ermöglicht.
zum beispiel von da http://www.haertfelder.com/JNIintro.html
aber vielleicht habe ich es nicht richtig verstanden
-
Danke
Ist es wirklich so, dass ich da jetzt nochmal ne Wrapper-DLL schreiben muss? Is ja schon ein bisschen nervig
-
Wenn du JNI brauchst, kannst du ja auch gleich ganz in C oder C++ schreiben. Da gehen doch die ganzen Vorteile von Java futsch.
-
Original erstellt von <blablabla>:
Wenn du JNI brauchst, kannst du ja auch gleich ganz in C oder C++ schreiben. Da gehen doch die ganzen Vorteile von Java futsch.hä? so ein unsinn...
da muss jetzt ein fachmann/frau ran ...
-
@bla Deswegen haben die Sun-Leute das wohl so kompliziert gemacht ...
Aber egal, wenn ich JNI nicht benutze ist der ganze Vorteil der DLL futsch