3

従来のJ++プロジェクトを継承しました。このプロジェクトを標準のSunJavaに正常にアップグレードしました。

ただし、このプロジェクトには、JavaコードがMicrosoft固有のRNIフレームワークを介して通信するネイティブC++dllが含まれています。

言うまでもなく、System.loadLibrary( "myRniNativeDll")を呼び出すと、依存関係の1つが見つからなかったというUnsatisifiedLinkErrorがスローされるようになりました。

C ++RNIdllをJNIdllに移行する方法がまったくわかりません。どこから始めたらいいのかわからない。C ++ソースコードを持っていますが、JNIdllをビルドする方法がわかりません。Javaの専門家が私に指摘できるヒント/チュートリアル/オンライン資料はありますか?

4

5 に答える 5

3

JNAを見てみましょう。その方法で RNI DLL に直接アクセスできる可能性があります。または、少なくとも、JNI を手動で行うよりも移植作業がはるかに簡単になります。

于 2009-09-15T21:06:55.240 に答える
2

可能であれば、純粋な Java で C++ コードを書き直して、RNI -> JNI 移植の問題を回避することを検討することをお勧めします。

JNI コードの作成には多大な注意が必要であり、書き方を誤ると JVM の安定性が危険にさらされます。私のアドバイスは、可能であれば避けることです。

于 2009-09-14T05:02:12.143 に答える
1

Java Native Interface: Programmer's Guide and Specificationは、JNI コードを作成するために私が見つけた最高のリソースです。RNI -> JNI については説明しませんが、JNI の仕組みを学ぶための優れた*出発点です。

*実際には非常に辛口で、読むのが特に楽しいわけではありませんが、私が見つけた中で最高のものです。

于 2009-09-15T21:11:42.607 に答える
1

私は Microsoft の RNI を使用したことがなく、Sun の JNI しか使用したことがありませんが、RNI スタイルの DLL を JNI スタイルの DLL であるかのように直接使用することはできないと思います。また、RNI を JNI に自動的に変換またはブリッジするものについても知りません。

C++ RNI DLL のソースがあるかどうかについては言及していませんが、プロジェクトの継承について言及しているため、ソースがあると仮定します。C++/C の経験があり、RNI DLL が提供する機能についてよく理解している場合は、それを JNI に移行するのはそれほど難しくありません。それを移植するために費やした時間は、それを前進させるためにおそらく報われるでしょう.

ウィキペディアの JNI エントリに提供したリンクには、JNI を使用したコーディングに関する多くの役立つリンクがあります。もう少し詳細がなければ、他のアドバイスをするのは難しい.

于 2009-09-14T05:07:58.117 に答える