2012-05-03 9 views
5

私は、エンコードされた文字列入力を受け取り、それをデコードするDLLを持っています。 DLLは、Codeblocksとmingw64を使用してWin7 64ビットで作成されました。 Cコードだけはうまく動作しますが、同じ文字列のwhileループでJNA経由で実行すると、約70%の呼び出しで正しくデコードされ、残りの部分は間違っています。私は状況をデバッグしたいが、JavaコードがJNAに制御を渡した後に、どうやってそれを行うかわからない。あるいは、どこを見るかについてのアイデアも役立ちます。次のようにJNA C DLLデバッグハウツーですか?

CとJNAでメソッドのシグネチャは、私が(「HelloWorldの」それを暗号化した文字列を取る場合

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); 

正しさは、例えば、出力によって決定されますが、私はに行くつもりはないです暗号化の詳細は無関係です)、暗号化された出力をこのDLLメソッドに渡します。10回中7回「HelloWorld」を3回取得します。そして、同じループ内で、同じ変数を使用して同じスレッドに10回もいるのです。誤った3回の出現もランダムですが、私が気がつける唯一のことは、最初の試合は何度も正しいと思っていますが、1〜10回の試合で正しく実行されません。

+0

[下のリンクをチェック](http://web.archive.org/web/20081210024620/http://www.kineteksystems.com/white-papers/mixedjavaandc.html) – user1097489

+0

どのように操作の「正確さ」?最初に、入力と出力で符号なしと符号付きの間の変換エラーがあります。 – technomage

+0

あなたのAPIは '' expkey''データの形式と '' out''バッファの大きさについて仮定しています。 – technomage

答えて

4

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