C和Java之间的指针引用

时间:2010-12-06 14:46:19

标签: java pointers java-native-interface

我是JNI和C的新手,我在解决如何完成这项任务时遇到了问题。

我有一个带有以下签名的本机C函数: void DoEncrypt(char * buffer,int * length) { ...加密缓冲区中的数据 ... ... }

我还有相反的方法在回来的路上做解密。我遇到的问题是,使用JNI,如何传递两个指针,然后通过包装器类或原始Java方法从其内存位置检索加密或解密的密码。

现在,我的想法是在C中编写一个包装器来调用DoEncrypt和DoDecrypt函数,它们将使用jobject和jstring来获取和输出密码值。

这是对的吗?它是最好/最简单/最快的方式吗?

感谢您分享的所有帮助。

谢谢,

1 个答案:

答案 0 :(得分:0)

包装函数很好,因为您可以直接从C测试DoEncrypt和DoDecrypt。您可以像这样编写包装器:

void DoEncrypt_jni(JNIEnv** env, jarray* buffer, int* length) {
    ... call the real DoEncrypt ...
}

(自从我编写JNI功能以来已经很长时间了。可能不太正确......) 或者,您可以尝试使用JNA,这基本上是“痛苦较小的JNI”。 使用JNA,您可以编写Java类

public class EncryptUtilsJNA {
    public static native void DoEncrypt(byte[] buffer, int length);
    public static native void DoDencrypt(byte[] buffer, int length);
}

和JNA解决了如何调用DoEncrypt / DoDecrypt C函数,显然它们必须像使用JNI一样从Java调用。