Servus!
Ich hab ein Problem mit JNI. Ich finde im Netz zwar tausende Beispiele und Tutorials die mir erklären wie ich JNI-fähigen C-Code schreibe, den in DLLs deploye und das dann mittels System.getLibary(...) in Java-Programmen zugänglich mache, aber irgendwie vermisse ich da eine ganz entscheidende Sache.
Ist bzw. sollte nicht Kern des Gedankens sein, dass ich mit JNI echt(!) nativen Code in Java ausführen kann? Sämtliche Tutorials laufen nach dem Schema ab:
1. Java-Code schreiben
2. kompilieren (javac)
3. Header-Datei erzeugen (javah)
4. dann erst den C-Code schreiben (der da dann natürlich schon den JNI-Konventionen entspricht)
5. diesen kompilieren (.so bei UNIX, .dll auf MS-Plattformen)
6. Java-Programm ausführen und fertig.
Wie gehe ich jetzt aber vor, wenn ich von Anfang an schon C-Sourcen habe und die nicht umschreiben kann oder will? Ich hab zwar gesehen, dass es dafür wohl Generators und/oder Wrapper-Tools gibt, aber das muss doch auch von Hand gehen, z.B. mithilfe einer Interface-DLL oder whatsoever.
Kann mir das jemand anhand eines HelloWorld-Beispiels erläutern? Also mit ganz normalem C-Code, z.B. so:
Ich hab ein Problem mit JNI. Ich finde im Netz zwar tausende Beispiele und Tutorials die mir erklären wie ich JNI-fähigen C-Code schreibe, den in DLLs deploye und das dann mittels System.getLibary(...) in Java-Programmen zugänglich mache, aber irgendwie vermisse ich da eine ganz entscheidende Sache.
Ist bzw. sollte nicht Kern des Gedankens sein, dass ich mit JNI echt(!) nativen Code in Java ausführen kann? Sämtliche Tutorials laufen nach dem Schema ab:
1. Java-Code schreiben
2. kompilieren (javac)
3. Header-Datei erzeugen (javah)
4. dann erst den C-Code schreiben (der da dann natürlich schon den JNI-Konventionen entspricht)
5. diesen kompilieren (.so bei UNIX, .dll auf MS-Plattformen)
6. Java-Programm ausführen und fertig.
Wie gehe ich jetzt aber vor, wenn ich von Anfang an schon C-Sourcen habe und die nicht umschreiben kann oder will? Ich hab zwar gesehen, dass es dafür wohl Generators und/oder Wrapper-Tools gibt, aber das muss doch auch von Hand gehen, z.B. mithilfe einer Interface-DLL oder whatsoever.
Kann mir das jemand anhand eines HelloWorld-Beispiels erläutern? Also mit ganz normalem C-Code, z.B. so:
Code:
#include <stdio.h>
// simple method with "Hello World!" output
void sayHello(void)
{
printf("Hello World!\n");
}
// main method of program
int main (void)
{
sayHello();
return 0;
}