0

私はちょっと慣れていませんが、自分のプロジェクトでレガシー dll をいつ使用したいかについて多くのことをJNI読んでいます。JNIすぐに、ネイティブ メソッドにパラメーターを指定できないことがわかりました。これは私が成功しなかったコーディングを試みた例です:

Hello.java:
package HelloWorld;

    Public class Hello {
    Private static native int HelloWorld();
    Private static native int Mirror(int a);
    Static {
      System.loadLibrary("Example"); //got path in            
                    vm arguments - works.
    }
    Public static void main(String[] args) {
    Int a = 8;
    System.out.println(Mirror(a));
    }

javah を使用して、この署名を得たヘッダーを作成しました。 JNIEXPORT jint JNICALL Java_HelloWorld_Hello_Mirror (JNIEnv *, jclass, jint);

次の impl を使用して、h と同じ署名の cpp: を作成しました。"return 1";

それだけです...これは私が日食から得るエラーです: Exception in thread "main" java.lang.UnsatisfiedLinkError: HelloWorld/Hello.Mirror(I)I at HelloWorld.Hello.main (Hello.java:14)


これらは私の考えです: A. c と cpp について何かを見ました。B.jdkか何か?C. ライブラリは完全に読み込まれます (パラメーターを取得しない他の関数を確認しました)。おそらく、型に互換性がありませんか?

しばらくこれで立ち往生しています。皆さんが私を助けてくれることを願っています!

4

1 に答える 1

0

解決しました!「extern c」コマンドの後に、cppファイルの両方の関数の周りに「{」を追加する必要がありました...

于 2013-03-13T09:53:40.383 に答える