Lier une interface graphique java swing et un backend c++ pour une application autonome, qui forment deux projets différents


Je veux lier un JAVA Swing GUI avec C++ fin pour une application autonome. Ces deux forment deux projets différents. J'ai lu à propos de Java Native Interface. Bien que JNI semble être la meilleure solution pour cela, j'ai peu de questions concernant JNI:

  1. JNI peut-il m'aider à lier différents projets (un en Java swing et d'autres en c++)?
  2. Si oui, en quoi sera-t-il différent de la liaison avec les fichiers du même projet?

Étant un débutant dans JNI, une aide technique détaillée sera utile.

Author: Luiggi Mendoza, 2015-01-19

1 answers

  1. Oui .

JNI nous aide à effectuer des appels à notre propre bibliothèque C++ à partir de java.

Je suppose que vous prévoyez que l'interface graphique et C++ soient sur le même processus (si oui JNI est la réponse, si non, vous devrez recourir à la communication intra-processus).

  1. , Vous devrez lier dynamiquement des projets de différentes langues.

Java est de la mémoire gérée, ce qui signifie que vous n'avez pas de véritable propriété sur la mémoire (le GC allmighty décide s'il va supprimer ou pas quelque chose).

C++ est une mémoire non gérée, ce qui signifie que vous devrez ramasser vos propres ordures.

Avec cette différence étant dit, il est tout à fait évident que lorsque vous interagissez avec eachother vous devez être sûr de ne pas supprimer la mémoire allouée dans l'un de l'autre.

C'est l'une des différences que vous rencontrerez à partir de fichiers de liaison dans le même projet.

L'autre est que vous aurez recours à la liaison dynamique.

Le code frome Java est compilé en intermédiaire tandis que celui de C++ est compilé dans un assembleur spécifique au processeur. Ce qui signifie que vous ne pouvez pas utiliser de code de l'un dans l'autre.

Nous avons donc recours à la Liaison dynamique.

Le code C++ sera compilé dans une bibliothèque partagée (. so ou .dll selon la plate-forme). Au moment de l'exécution, votre application java Swing (qui sera le point d'entrée) chargera la bibliothèque dynamique dans la mémoire du programme (vous devrez l'appeler manuellement à partir de votre code, système.loadLibrary est la fonction si je me souviens bien).

Une fois la bibliothèque chargée, si vous avez construit votre bibliothèque correctement (pour cela, vous devez suivre des tutoriels, je ne vais pas l'expliquer ici), vous aurez le .symboles exportés par dll disponibles en java .

La pratique habituelle lors de l'utilisation de JNI est de créer une bibliothèque bridge qui relie un certain nombre de fonctions C++ à une classe bridge en Java.

Il existe des programmes automatiques qui créent ce pont pour vous (comme SWIG), mais je vous recommande fortement évitez - les (d'autant plus que vous n'avez pas une compréhension complète de JNI).

 0
Author: MichaelCMS, 2015-01-20 07:57:32