6

我有一个 DLL,它接受编码的字符串输入并对其进行解码。DLL 是在 Win7 64 位上使用 Codeblocks 和 mingw64 制作的。单独的 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 方法,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 回答