6

エンコードされた文字列入力を受け取り、それをデコードするDLLがあります。DLLは、Codeblocksとmingw64を使用してWin764ビットで作成されました。Cコードだけでも問題なく動作しますが、同じ文字列を使用してwhileループでJNAを介して実行すると、約70%の呼び出しで適切にデコードされ、残りは正しくデコードされません。状況をデバッグしたいのですが、Javaコードが制御をJNAに渡した後の方法がわかりません。あるいは、どこを見ればよいかについてのアイデアも役立ちます。

CとJNAのメソッドシグネチャは次のとおりです。

Java: int Decrypt_Blk(byte[] expkey, byte[] in, int size, byte[] out);  
C: __declspec (dllexport) int Decrypt_Blk (unsigned char *expkey, unsigned char *in, unsigned int insize, unsigned char *out);

正確さは出力によって決定されます。たとえば、文字列「helloworld」を使用して暗号化すると(関連性がないため、暗号化の詳細については説明しません)、暗号化された出力をこのDLLメソッドに10回中7回渡します。 「HelloWorld」を他の3回取得すると、正しくないさまざまな文字が表示されます。そして、10回すべて、同じループで同じ変数を使用して同じスレッドにいます。3つの誤った発生もランダムです。私が気付くことができる唯一のことは、最初の実行はテストした回数だけ常に正しいことですが、誤った実行は1〜10回の実行のいずれかで発生します。

4

1 に答える 1

6

Microsoft Visual C ++では、DLLプロジェクトのプロジェクト設定から[デバッグ]タブを選択できます。デバッグセッションの実行可能ファイルとして、Java.exeのフルパスを指定します。引数には、Javaアプリを実行するためのコマンドラインの残りの部分を指定します。Cコードにブレークポイントを設定し、デバッグセッションを開始します。出来上がり!

于 2012-05-03T15:29:48.267 に答える