Startseite bisherige Projekte Tools/Snippets Bücherempfehlungen Publikationen Impressum Datenschutzerklärung

JNI mit Microsoft Visual StudioNovember 2014

Seit 2005 gibt es kostenlose Versionen von Microsoft Visual Studio (MVS), die Express Editions, die sich auch gut für die JNI Entwicklung eignen.

Hier finden sich einige nützliche Einstellungen für den Java-Programmierer, der kaum C/C++-Erfahrung hat.

Einstellungen

/sdl (Enable Additional Security Checks) abstellen und evtl. Auch vorkompilierte Header abstellen.

Includes

Aus dem JVM-Verzeichnis die Unterverzeichnisse include, include/win32 und include/win32/bridge in Eigenschaften > C++ > Zusätzliche Includeverzeichnisse angeben.
Vorher sicherstellen, dass die aktive Konfiguration bearbeitet wird (peinliche Dinge können sonst passieren).
Wenn es gar nicht klappt mit den includes, die Verzeichnisse kopieren ins MVS Verzeichnis, z.B. nach C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include.

Unicode-Probleme

Fehlermeldungen der Art "Das Argument vom Typ ""const char *"" ist mit dem Parameter vom Typ ""LPCWSTR"" inkompatibel." werden durch den Unterschied Unicode vs. Nicht-Unicode Codierung verursacht.

Lösungen: Lösung der Wahl ist aber das Umstellen auf Multibyte-Zeichensatz in den Optionen.

Aufrufkonventionen

Wenn bei Aufrufen von Befehlen aus einer externen Bibliothek beim Ausführen eine Fehlermeldung der Art "the value of ESP was not properly saved..." erscheint so wird eine falsche Aufrufkonvention verwendet. Dadurch ist der Stackpointer (ESP) nach dem Funktionsaufruf an einer anderen Stelle als vorher.
Um dies zu Ändern, kann im typedef die Konvention (WINAPI oder CALLBACK) angegeben werden, z.B.
typedef int(WINAPI*createvm)(JavaVM**, void**, JavaVMInitArgs*);
Weitere Erklärungen externer Link auf StackOverflow.

Konsole und nicht-Konsole

Möglicherweise sollen Programme als Konsolenanwendung und als Anwendung ohne Konsole verfügbar sein, abhänging von der ausgewählten Konfiguration.
Unter MVS ist dies dadurch möglich, dass mit einer Konsolenanwendung begonnen wird. Um die Konsole zu entfernen dann in den Einstellungen unter "Linker > System > Subsystem" Windows einstellen statt Console. Als zusätzlichen Parameter für den Linker dann /entry:mainCRTStartup eingeben. Dadurch wird anstatt der für Windows-Anwendungen üblichen Funktion WinMain die Funktion mainCRTStartup als Einstiegspunkt verwendet, die etwas später das main des Programms aufruft.

verlinkte DLLs

Wenn es Fehlermeldungen bzgl. runtime-DLLs gibt, z.B. Fehlen von msvcr120.dll oder msvcp120.dll kann dies auf zwei Arten gelöst werden:
  1. Die Dateien aus dem "Visual C++ Redistributable" von Microsoft verwenden. Das Redistributable installieren und die benötigten Dateien aus einem Unterverzeichnis von C:\Windows ins Programmverzeichnis kopieren.
  2. Den Runtime-Code ins Programm linken, mit der Option /MT (statt /MD) in den Einstellungen unter "C/C++ > Codegenerierung > Laufzeitbibliothek".
Weitere Erklärungen externer Link auf StackOverflow.
Impressum - Datenschutzerklärung