24.5 Links und Weiteres
 
Weitere Themen sind dem Buch »Advanced Programming for the Java 2 Platform« auf den Web-Seiten von Sun unter http://developer.java.sun.com/developer/onlineTraining/Programming/JDCBook/jniref.html zu entnehmen. Auch findet sich eine intensivere Auseinandersetzung mit den anderen Themen unter http://java.sun.com/docs/books/tutorial/native1.1/. Eine JNI-FAQ bietet die Webseite von JGuru: http://www.jguru.com/faq/subtopic.jsp?topic-ID=472.
cxxwrap (http://www.deaven.net/~deaven/Software/cxxwrap/) liest Header-Dateien von C++ ein und generiert automatisch für die Klassen Stellvertreter auf der Java-Seite sowie Delegates in JNI, die auf die tatsächliche Implementierung weiterleiten. Aus den Beschreibungen der Header-Dateien nimmt cxxwrap nicht nur die Klassen mit Methoden, sondern auch die Konstanten. Auch versucht cxxwrap so gut wie möglich die Parametertypen zu übersetzen, etwa char unsigned char in byte und Pointer auf primitive Zellen in Arrays. Die Konstruktoren, Destruktoren und Methoden werden von der Java-Seite auf die C++-Seite weitergeleitet.
Sind die nativen Methoden über DLL bzw. COM zugänglich, kann ein anderer Weg eingeschlagen werden. Jawin (http://jawinproject.sourceforge.net/) ermöglicht mit einer kleinen nativen Bibliothek den Zugriff auf diese Ressourcen; besonders praktisch ist für MS-Office all das, was sich fernsteuern lässt. Die Webseite nennt etwa folgendes Beispiel, um in PowerPoint Folien hinzuzufügen:
Ole32.CoInitialize();
DispatchPtr app = new DispatchPtr("PowerPoint.Application");
app.put("Visible", true);
DispatchPtr preses = (DispatchPtr)app.get("Presentations");
DispatchPtr pres = (DispatchPtr) preses.invoke("add", new Integer(-1));
DispatchPtr slides = (DispatchPtr)pres.get("Slides");
DispatchPtr slide = (DispatchPtr) slides.invoke("Add", new Integer(1), new Integer(2));
DispatchPtr shapes = (DispatchPtr)slide.get("Shapes");
DispatchPtr shape = (DispatchPtr) shapes.invoke("Item", new Integer(1));
DispatchPtr frame = (DispatchPtr)shape.get("TextFrame");
DispatchPtr range = (DispatchPtr)frame.get("TextRange");
range.put("Text", "Use Jawin to call COM objects");
Ole32.CoUninitialize();
Eine weitere Bibliothek ist NativeCall (http://nativecall.sourceforge.net/). Die Webseite gibt ein Beispiel zum Kopieren von Dateien mit der Windows-API:
import com.eaio.nativecall.*;
...
NativeCall.init();
IntCall ic = new IntCall( "CopyFileA" );
ic.executeCall
Abschließend sei noch com4j (https://com4j.dev.java.net/) genannt, welches ebenso wie Jawin zwischen Java und Microsoft COM kommuniziert. Interessant ist hier die Einbeziehung von Java 5, insbesondere der Annotationen.
|