在Java和C之间传递数据

7 c java java-native-interface

我有一个C结构.

struct data{
    double value1[50];
    double value2[50];
    int count;
};
Run Code Online (Sandbox Code Playgroud)

我想将数据从java映射到这个C结构.如何使用JNI?java代码不会由我编程.java程序员只想知道他应该以哪种形式向我发送数据?他应该期待更多细节吗?

我目前正在通过使用包含2列的CSV文件填充结构实例来测试我的代码.

我还想从我的C代码返回3个double值到java应用程序.

dac*_*cwe 5

如果你想在java端使用相同类型的“结构”,我将创建一个与该结构相对应的类(以便java和c开发人员可以谈论相同的事情):

class JavaData {
    double value1[50];
    double value2[50];
    int count;
};
Run Code Online (Sandbox Code Playgroud)

然后,当进入 JNI 时,您需要将值从 java 世界复制到 java 世界。这是您如何执行此操作的示例:

// get the class
jclass javaDataClass = env->FindClass("JavaData");

// get the field id
jfieldID countField = env->GetFieldID(javaDataClass, "count", "I");

// get the data from the field
cData.count = env->GetIntField(jData, countField);

... (the rest of the parameters)
Run Code Online (Sandbox Code Playgroud)


Vla*_*nov 3

向您的 java 程序员提供以下声明:

public native double[] doData(double [] value1, double [] value2, int count);
Run Code Online (Sandbox Code Playgroud)

在您的 C 代码中,您将能够使用传递的参数填充结构。JNI 标头将如下所示:

JNIEXPORT jdoubleArray JNICALL Java_package_className_doData(JNIEnv * , jobject, jdoubleArray , jdoubleArray, jint);
Run Code Online (Sandbox Code Playgroud)