Question

J'ai hérité d'un projet J ++ hérité. J'ai mis à niveau ce projet vers Sun Java standard avec succès.

Toutefois, ce projet inclut une dll C ++ native à laquelle le code Java communique via le Structure RNI .

Il va sans dire que l'appel de System.loadLibrary ("myRniNativeDll") génère désormais une UnsatisifiedLinkError, indiquant qu'une des dépendances est introuvable.

Je ne sais absolument pas comment migrer une dll RNI C ++ vers une dll JNI; Je ne sais pas par où commencer. J'ai le code source C ++, mais je ne sais pas comment construire une dll JNI. Existe-t-il des astuces / didacticiels / supports en ligne que les experts de Java peuvent m'indiquer?

Était-ce utile?

La solution

Si la licence est acceptable (LGPL), Accès natif Java fournit un FFI plus convivial que le JNI fait; le portage peut réduire à supprimer la couche RNI et simplement exposer une simple API 'appelable'.

Autres conseils

Jetez un coup d'œil à JNA . Vous pourrez peut-être accéder directement à la DLL RNI directement de cette façon. ; ou du moins, il sera beaucoup plus facile de le porter que de le faire manuellement avec JNI.

Si possible, je vous suggère d’éviter le RNI - > JNI problème de portage en réécrivant le code C ++ en Java pur.

L'écriture de code JNI nécessite beaucoup de soin et met la stabilité de la machine virtuelle en péril si vous vous trompez. Mon conseil est d'éviter si vous le pouvez.

Même si je n'ai jamais utilisé le RNI de Microsoft, mais uniquement le JNI de Sun, je m'attendrais à ce que vous ne puissiez pas utiliser directement une DLL de style RNI comme s'il s'agissait d'une DLL de style JNI. Je ne connais pas non plus quoi que ce soit qui convertirait automatiquement ou relierait RNI en JNI.

Vous ne mentionnez pas si vous avez le code source de la DLL RNI C ++, bien que je le suppose, car vous avez mentionné hériter du projet. Si vous avez une expérience de C ++ / C et avez une bonne idée de la fonctionnalité fournie par la DLL RNI, il ne devrait pas être trop difficile de la déplacer vers JNI. Le temps investi dans le portage serait probablement rentable pour le maintenir.

Le lien que vous avez fourni à l'entrée JNI sur Wikipedia contient de nombreux liens utiles sur le codage. avec JNI. Sans un peu plus de détails, il est difficile de donner un autre conseil.

Interface native Java: Guide du programmeur et spécifications est la meilleure ressource que je puisse utiliser. 'ai trouvé pour écrire du code JNI. Il ne couvre pas RNI - > JNI, mais c’est un excellent * point de départ pour apprendre le fonctionnement de JNI.

* C'est en fait très sec, et pas particulièrement amusant à lire, mais c'est le meilleur que j'ai pu trouver.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top