J ++からJava:RNIからJNIへの移行方法
-
07-07-2019 - |
質問
レガシーJ ++プロジェクトを継承しました。このプロジェクトを標準のSun Javaに正常にアップグレードしました。
ただし、このプロジェクトには、Microsoft固有の RNIフレームワーク。
言うまでもなく、System.loadLibrary(" myRniNativeDll")を呼び出すと、依存関係の1つが見つからなかったことを示すUnsatisifiedLinkErrorがスローされるようになりました。
C ++ RNI dllをJNI dllに移行する方法はまったくわかりません。どこから始めればいいのか分かりません。 C ++のソースコードは持っていますが、JNI dllの作成方法がわかりません。 Javaの専門家が指摘できるヒント/チュートリアル/オンライン資料はありますか?
解決
ライセンスが受け入れられる場合(LGPL)、 Java Native Access は、より使いやすいFFIを提供します。 JNIはそうします。移植により、RNIレイヤーが取り除かれ、単純な「C」呼び出し可能APIが公開されるだけになります。
他のヒント
JNA をご覧ください-RNI DLLに直接アクセスできる場合があります;または、少なくともJNIを手動で実行するよりもはるかに簡単に移植できるようになります。
可能であれば、RNIの回避を検討することをお勧めします-> Pure JavaでC ++コードを書き換えることによるJNI移植の問題。
JNIコードの作成には多大な注意が必要であり、間違えた場合はJVMの安定性が危険にさらされます。私のアドバイスは、可能であればそれを避けることです。
MicrosoftのRNI、SunのJNIのみを使用したことはありませんが、RNIスタイルのDLLをJNIスタイルのDLLであるかのように直接使用できないことを期待します。また、RNIをJNIに自動的に変換またはブリッジするものは何も知りません。
C ++ RNI DLLのソースがあるかどうかは言及しませんが、プロジェクトの継承について言及しているため、そうすることを想定しています。 C ++ / Cの経験があり、RNI DLLが提供する機能について十分に理解している場合、JNIに移行するのはそれほど難しくないはずです。移植に費やした時間は、おそらくそれを前進させ続けることに見合うでしょう。
Wikipedia のJNIエントリに提供したリンクには、コーディングに関する多くの役立つリンクがあります。 JNIと。もう少し詳しく説明しなければ、他のアドバイスをすることは困難です。
Javaネイティブインターフェイス:プログラマーズガイドと仕様 'JNIコードを記述していることがわかりました。 RNIはカバーしません-> JNI。ただし、JNIの仕組みを学ぶための素晴らしい*出発点です。
*それは実際には非常に乾燥しており、読むのは特に楽しくはありませんが、私が見つけた中で最高です。