Für was es wert ist, hatte ich ein Projekt wie dieses eine Weile zurück. Es war ziemlich einfach, die JNI-Wrapper automatisch zu generieren. Ich denke, wir hatten rund 350 Funktionsexporte zu wickeln. Es hat ungefähr 3 Stunden gedauert, ein Skript zusammenzustellen, um den Wrapper automatisch zu generieren (sorry, das Skript ist nicht griffbereit oder ich poste es).
Wir haben fast selbst keinen C++ Code geschrieben - aber es musste verstanden werden, wie JNI funktioniert ... Das ist eigentlich eine ziemlich gute Lernmöglichkeit/Projekt - wenn Sie Zeit haben, haben Sie keine Angst vor JNI - werden Sie Seien Sie erstaunt, wie viel Sie darüber lernen, wie die JVM funktioniert ...
Wenn Sie diese Route gehen, empfehle ich, dass Sie Ihre Wrapper-Funktionen wirklich, wirklich leicht - buchstäblich keine Verarbeitung in ihnen überhaupt. Transformieren Sie einfach die notwendigen Argumente von JNI-Werten in native (dies wird hauptsächlich für Strings benötigt), rufen Sie Ihre native Funktion auf und transformieren Sie die Ergebnisse zurück.
Wenn Sie eine Funktion haben, die einen Zeichenfolgenzeiger übergibt und erwartet, dass die Zeichenfolge im Zeiger zurückkommt, verwenden Sie ein Zeichenfolgenarray mit der Größe 1 von der Java-Seite und füllen Sie sie mit dem Ergebnis des systemeigenen Aufrufs.
Oder wenn Sie für die Zeit gedrückt werden, kompilieren Ihre LIB eines .dll und JNA verwenden :-)
Ja ich konnte, aber ich würde sehr viel lieber das ganze Zeug directrly von Java-Aufruf. . . Es würde mir erlauben, schneller zu experimentieren. Die Bibliothek, die ich benutze, ist eine Unordnung, die Hunderte von Funktionen hat, so dass das Schreiben eines vollständigen Wrappers keine Option ist, und es nach und nach zu tun, wird auch ein Schmerz sein. –
Ich schlage nicht die JNI vor, es gibt also keine Notwendigkeit, komplexe Dinge in Wrapper zu schreiben. In der Tat ist es einfach - Präfix _declspec (dllexport) zu jeder Funktion in der Kopfzeile (die einfach durch Search-Replace-Editor erfolgen kann) und als DLL-Projekt erstellen, dann sollte es Ihnen eine DLL geben. – Francis
Ich werde es versuchen, danke. –