Quelle méthode suivante (ou autre) recommanderiez-vous pour accéder à une bibliothèque partagée C++ depuis Java et pourquoi?
- JNI: J'ai entendu dire que cela comporte un certain nombre de pièges et est plutôt difficile à entreprendre?
- SWIG: Apparemment, cela rend l'utilisation de JNI plus facile, mais j'ai entendu dire que cela pose également des problèmes?
- JNA: Je pourrais écrire une interface C et l'utiliser avec JNA à la place, ce qui est apparemment beaucoup plus facile que JNI?
- CNI: Apparemment, cela est plus facile que JNI?
- Une autre bibliothèque: elle ne peut pas être commerciale et je préférerais quelque chose qui soit toujours bien maintenu (cela exclurait JNIEasy, JNative et JACE, je crois).
J'essaie de minimiser le temps de développement et les problèmes à l'avenir. Toute information sur les avantages/inconvénients de chacune de ces méthodes serait appréciée.
MODIFICATION : Idéalement, je pourrais utiliser mes objets C++ en Java, mais comme je l'ai mentionné au #3, je pourrais écrire une interface C en utilisant uniquement des fonctions si nécessaire. L'interface C++ que je voudrais avoir disponible en Java ressemble à ceci :
class MyObj1
{
MyObj1(std::string, bool);
bool Func1();
void Func2(bool);
}
class MyObj2
{
MyObj2(MyObj1*);
ssize_t Func(uint8_t *, size_t, MyObj1);
}
L'interface réelle est un peu plus compliquée, mais cela illustre le type d'objets et de méthodes que j'utiliserai. Certains des objets sont dérivés, mais l'interface Java n'a pas besoin d'avoir de comportement polymorphe.