PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Wie erstelle Wrapper?



Silver
20-02-2004, 19:32
Hallo Leute!

Da ich in letzter Zeit von Java einfach überzeugt bin :D , will ich gerne einmal probieren einen Wrapper von einem C/C++ Code zu erstellen! Ok, nun die 1 Millionen € Frage, wie geht das?!? So ich weiss was ein Wrapper ist und auch ein wenig wie diese arbeiten, aber wie "programmiert" man sie?

Meine Fragen daher:

Ist es schwer einen Wrapper mittels Java zu schreiben der auf ein C/C++-Lib

Gibts bei Wrappers Performanceschwächen?

Wie funktionieren sie eigentlich?!?

Ich danke euch im Voraus, für jede sinnhaftige Antwort ;) !

mfG

peschmae
21-02-2004, 00:00
1) Ich hab sowas noch nie gemacht.
2) Ich würds in den beiden Büchern die ich da hab nachschauen (Core Java) - sieht aber länger aus als was was ich dir abschreiben würde ;)
3) Wrappen kannst du nur C-Sachen, also z. B. keine Klassen
4) JNI soll langsam sein. Sehr sogar. Allerdings hab ich das wie schon gesagt noch nie getestet. SWTFox (das wie alle anderen SWTs auch) über JNI funktioniert läuft jedenfalls schnellstens
5) Wie meinst du das "wie funktioniert das eigentlich"?

MfG Peschmä

Silver
21-02-2004, 07:38
naja vielleicht ist Wrapper das falsche Wort! zB Gtk ist ja in C geschrieben und es gibt ja auch gtkmm, und das wurde mittel c++ Bindings erstellt! Wie haben die das gemacht?

mfG

peschmae
21-02-2004, 09:06
ähg, jetzt verstehe ich nicht mehr ganz, was du eigentlich wissen möchtest. :eek:

MfG Peschmä

Silver
21-02-2004, 13:39
ok, nochmals ganz langsam!
Wie du sicher weisst gibt es ja Gtk welches in reinem C geschrieben ist. Und es gibt zb auch Gtkmm welches einem erlaubt mittels C++ Gtk-Programme zu erstellen! Ok, Gtkmm ist ein C++-Interface für Gt+! Und ich möchte gerne wissen, wie man so etwas programmiert, spricht wie man Gtkmm erstellt hat! Verstehst du mich?!? Aber ich will so etwas nicht direkt mit C++ sondern mit Java machen!!!

Du hast mir schon einen heissen Tipp gegben, JNI! Hab dann einmal ein bisschen das Java-Gtk-Projekt ( java-gnome.sf.net ) durchgestöbert, und verstehe nun auch wie die das implementiert haben, mittels dem JNI-Layer! Im Prinzip nicht so kompliziert...


Da du aber sagst JNI soll total lahm sein, gibts da auch noch andere Möglichkeiten?!?

mfG

arthur
21-02-2004, 14:39
hi,

schau dir mal swig an:
http://www.swig.org/
das ist ein wrapper generator für c/c++ module und höhere sprachen wie java, python ...
und was die geschwindigkeit betrifft, ich hatte bisher keine probleme mit jni ;)

gruß
Arthur

Lin728
21-02-2004, 17:51
Ja, das kannst du mit JNI machen, ist allerdings mühselig

JNI ist sehr schnell wenn man von Java aus auf C-Code zugreigft (Overhead von ca 15 Prozessorzyklen), aber langsam wenn man von C auf Java zugreift.
Die meisten Sachen in Java laufen ganz unten über JNI ab, auch sämtliche Java2D-Calls.

Die Benchmarks von Sun, dass etwas über JNI zu machen langsamer ist, ist nicht ganz so schlimm. Die benchmarks greifen teilweise in Schleifen auf Java-Objekte zu, das bremst das ganze total aus.

lg

anda_skoa
21-02-2004, 18:38
zu JNI gibts ein Tutorial auf der Java Seite von Sun:
http://java.sun.com/docs/books/tutorial/native1.1/

Ist ansich nicht so schwer, bei Wrappern mit vielen Klassen aber bischen Arbeit, wie ceisserer schon geschrieben hat.

Große Wrapper, wie zB QtJava werden daher auch oft generiert.

Wenn der Wrapper nur eine Handvoll Klassen ist, geht es auch "zu Fuß"

Ciao,
_

Silver
21-02-2004, 19:17
hab mich in JIN auch schon ein wenig eingearbeitet und ausser von ein paar Sachen, gabs noch kein größeren Probleme. (naja der java.library.path lässt sich nicht setzen)


Original geschrieben von anda_skoa

Große Wrapper, wie zB QtJava werden daher auch oft generiert.

Ciao,
_

Wenn ich in den java-gtk source reinschaue steht dort bei allen C-Files (welche für JNI benötigt werden) als Kommentar "Code generated"!
Ja der Gtk (u. Gnome, Glade, GLib, etc.) Source ist ziemlich mächtig, könnte das automatisch generierter Code sein? Bin jetzt nur drauf gekommen, weil du auch geschrieben hast "generiert" ! Oder meinst du etwas anderes?

mfG

peschmae
21-02-2004, 20:59
Ja. JavaGnome/Gtk wird automatisch generiert. Das reicht allerdings nur als Grundgerüst - also nicht einfach *klick* *wart* - da wär das nächste Release der Bindings sondern es müssen noch recht viel Änderungen von Hand vorgenommen werden.

MfG Peschmä