最近JNIを学習していました。私はJavaファイルにネイティブメソッドを書き、javah.exeでJavaファイルをコンパイルした後にヘッダファイルを取得しました。それから、.cppファイルを書いて、code :: blocksで.dllファイルにコンパイルしました。 Javaプログラムを実行しましたが、エラーが発生しました:java error。dllファイルの "@ 8"接尾辞を削除するには
だから私は、DLLのエクスポートビューアを使用して.dllファイルをオープンし、「@ 8」接尾辞が、関数名であったことがわかりました。 suffix @8。これが私のJavaファイルが正常に動作しなかった理由だと思いました。だから誰も関数名の "@ 8"接尾辞を削除する方法を知っていますか?
なぜあなたはちょうど自分のdllをクラックしていますか?代わりにインタフェースを宣言する際に間違っているかどうかを確認してください。 –
C++のソースコードを見せてください。ほとんどの場合、あなたは 'sayHello'関数の呼び出し規約に間違ったことをしました。 Pascalのようなものではなく( 'stdcall'とも呼ばれる)、Cのようなもの(' cdecl'とも呼ばれる)でなければなりません。 http://stackoverflow.com/questions/20790001/jni-does-not-work-with-stdcall –
ええ、私は何度もJavaコード、ヘッダファイル、およびcppファイルをチェックしました。私はこのエラーに関する多くの情報を尋ねる前に調べました。そして、彼らはエラーの原因となったのは関数名だと答えましたが、解決策を提示しませんでした。 –