我有一个DLL,它接受一个经过编码的字符串输入并将其解码。该DLL是在Win7 64位上使用Codeblocks和mingw64制作的。C代码单独运行正常,但当我通过JNA在while循环中以同样的字符串运行它时,大约70%的调用已正确解码,其余的则不正确。我想调试这种情况,但不确定在Java代码将控制权移交给JNA后该如何操作。或者,任何关于哪里可以查找的想法也会很有帮助。
C和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次中的任何一次。