Also erstmal muss ich den hier Anwesenden Recht geben.
@Jens: Lies erstmal alle verlinkten Artikel/Threads, wenn sie dir angeboten werden. Und allererste Anlaufstelle für Informationen bleibt immer noch SUN mit ihren verschiedenen Java-Artikeln, die einem eigentlich alles Wichtige erklären können. Ich hab auch allein mit deren Hilfe mein erste JNI-Programm gebaut ohne irgendwelche anderen Tutorials oder so zu brauchen.
Eine exzellente Quelle ist z.B.
dieses Kapitel eines auf java.sun.com verfügbaren Open Books.
Das dir alle Vorredner gesagt haben, dass das, was du machen willst, nicht geht oder nur über Wrapper geht, liegt vielleicht daran, dass du nicht ganz deutlich gesagt hast, ob du nun eine C/C++-Bibliothek hast, die du nicht entwickelt hast, oder eine, die du selber entwickeln möchtest.
Hast du eine fremde Bibliothek, kannst du die dort enthaltenen Funktionen nicht direkt aus Java mit JNI aufrufen, da JNI zum Einen bestimmte Signaturen der Funktionen fordert, und zum Anderen die Java-Typen nicht mit C-Typen kompatibel sind.
Die einzige Möglichkeit, die du hier hast, ist das "Wrappen". D.h. du baust dir eine Bibliothek, die nichts anderes macht, als deinen Java-Aufruf entgegenzunehmen und die Argumente in C-Typen umwandelt und dann die eigentliche Bibliothek aufruft. Zum Schluss muss natürlich das Ergebnis in Java-Typen umgewandelt werden.
Baust du dir selber eine Bibliothek, die du aufrufen willst, dann bist du komplett frei, welche Typen du nutzt. Du kannst auch direkt mit Java-Typen arbeiten (also mit den JNI-Strukturen, die diese darstellen).
Genereller Ablauf:
1. Java-Klasse schreiben mit deiner nativen Methode ("[modifier] native [return_type] [name]([arguments])"), und dem Befehl zum Laden der Bibliothek
2. Kompilieren der Java-Klasse
3. Generieren der Header-File mit javah
4. Implementieren deines nativen Codes mit der eben erzeugten Header-File
5. Kompilieren des nativen Codes zu der gewünschten Bibliothek
Wenn du eine fremde Bibliothek hast, dann machst du im 4. Schritt nichts anderes, als den Aufruf für die eigentliche Bibliothek zu übersetzen und zu delegieren...
Ich hoffe das war hilfreich soweit. Und lies das verlinkte Buch-Kapitel!