Frage

Ich habe ein Vermächtnis J ++ Projekt geerbt. Ich habe dieses Projekt Standard Sun Java Upgrade erfolgreich.

Allerdings enthält dieses Projekt eine native C ++ DLL, die die Java-Code Gespräche über die Microsoft-spezifischen RNI Rahmen .

Unnötig zu sagen, rufen System.loadLibrary ( „myRniNativeDll“) nun wirft ein UnsatisifiedLinkError und sprach eine der Abhängigkeiten konnte nicht gefunden werden.

Ich bin völlig ahnungslos, wie eine C ++ RNI DLL in einem JNI-DLL zu migrieren; Ich habe keine Ahnung, wo man anfangen soll. Ich habe den Quellcode C ++, aber ich weiß nicht, wie ein JNI-DLL zu bauen. Gibt es irgendwelche Tipps / tutorials / Online-Materialien Sie Java-Experten, mich zeigen kann?

War es hilfreich?

Lösung

Wenn die Lizenzierung akzeptabel (LGPL) ist, Java Native Access einen eher freundlichen FFI als die JNI tut; Portierungs reduzieren die RNI Schicht Abstreifen und nur eine einfache ‚C'-aufrufbare API aussetzt.

Andere Tipps

Hier finden Sie aktuelle JNA - es könnte möglich sein, die RNI DLL direkt auf diese Weise den Zugriff auf ; oder zumindest wird es die Aufgabe der Portierung es viel einfacher machen als JNI tun manuell.

Wenn möglich, schlage ich vor, dass Sie betrachten die RNI vermeiden -> JNI Problems Portierung durch den C ++ Code in Java neu zu schreiben.

Schreiben JNI Code erfordert eine riesige Menge an Sorgfalt und legt JVM Stabilität gefährdet, wenn Sie es falsch ist. Mein Rat ist, es zu vermeiden, wenn Sie können.

Während ich noch nie Microsofts RNI verwendet, nur Suns JNI, würde ich erwarten, dass Sie nicht direkt eine RNI-Stil DLL verwenden könnte, als ob es sich um eine JNI-Stil DLL waren. Ich bin auch nicht bewusst alles, was automatisch konvertieren oder Brücke RNI zu JNI würde.

Sie erwähnen nicht, wenn Sie die Quelle mit dem C ++ RNI DLL, obwohl ich Sie gehe davon aus tun, da Sie das Projekt erwähnen vererben. Wenn Sie irgendeine C ++ / C Erfahrung haben, und haben eine gute Vorstellung davon, welche Funktionalität der RNI DLL bereitstellt, sollte es nicht allzu schwierig sein, um es zu JNI zu bewegen. Die Zeit investiert es in die Portierung würde für die Aufrechterhaltung es wahrscheinlich auszahlen voran.

Der Link auf dem JNI Eintrag, die auf Wikipedia hat viele hilfreiche Links auf Codierung mit JNI. Ohne ein bisschen mehr Detail, ist es schwer, andere Ratschläge zu geben.

Java Native Interface: Programmierhandbuch und Spezifikation ist die beste Ressource, die ich habe für das Schreiben von JNI-Code gefunden. Sie gilt nicht für RNI -.> JNI, aber es ist ein großer * Ausgangspunkt für das Lernen, wie JNI funktioniert

* Es ist eigentlich sehr trocken, und nicht besonders Spaß zu lesen, aber es ist das Beste, was ich habe in der Lage gewesen zu finden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top