JNA C DLL Debug Howto?

时间:2012-05-03 10:03:03

标签: java c dll jna

我有一个DLL,它接受编码的字符串输入并对其进行解码。 DLL是使用Codeblocks和mingw64在Win7 64位上制作的。 C代码单独运行正常但是当我通过JNA在具有相同字符串的while循环中运行它时,它被正确解码大约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方法,7 out 10次​​我得到“HelloWorld”其他3次我会得到不正确和不同的字符。并且在所有10次中,我在同一个线程中使用相同的变量,在同一个循环中。 3次不正确的事件也是随机的,我唯一能注意到的是第一次运行总是正确的,就像我测试的那样多次,但不正确的运行发生在1-10次运行中的任何一次。

1 个答案:

答案 0 :(得分:5)

在Microsoft Visual C ++中,从DLL项目的“项目设置”中,可以选择“调试”选项卡。作为调试会话的可执行文件,提供Java.exe的完整路径。对于参数,请提供命令行的其余部分以运行Java应用程序。在C代码中设置断点并启动调试会话。瞧!