エンコードされた文字列入力を受け取り、それをデコードする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回の実行のいずれかで発生します。