2016-04-16 6 views
0

最近JNIを学習していました。私はJavaファイルにネイティブメソッドを書き、javah.exeでJavaファイルをコンパイルした後にヘッダファイルを取得しました。それから、.cppファイルを書いて、code :: blocksで.dllファイルにコンパイルしました。 Javaプログラムを実行しましたが、エラーが発生しました:java errordllファイルの "@ 8"接尾辞を削除するには

enter image description here

だから私は、DLLのエクスポートビューアを使用して.dllファイルをオープンし、「@ 8」接尾辞が、関数名であったことがわかりました。 suffix @8。これが私のJavaファイルが正常に動作しなかった理由だと思いました。だから誰も関数名の "@ 8"接尾辞を削除する方法を知っていますか?

+0

なぜあなたはちょうど自分のdllをクラックしていますか?代わりにインタフェースを宣言する際に間違っているかどうかを確認してください。 –

+0

C++のソースコードを見せてください。ほとんどの場合、あなたは 'sayHello'関数の呼び出し規約に間違ったことをしました。 Pascalのようなものではなく( 'stdcall'とも呼ばれる)、Cのようなもの(' cdecl'とも呼ばれる)でなければなりません。 http://stackoverflow.com/questions/20790001/jni-does-not-work-with-stdcall –

+0

ええ、私は何度もJavaコード、ヘッダファイル、およびcppファイルをチェックしました。私はこのエラーに関する多くの情報を尋ねる前に調べました。そして、彼らはエラーの原因となったのは関数名だと答えましたが、解決策を提示しませんでした。 –

答えて

0

GCCでコンパイルする場合は、--kill-atを入力するだけで問題は解決します。 MSVCの場合は、hereです。

+0

あなたは私の問題に別の解決策を提供します。どうもありがとうございました! –

関連する問題