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应用程序.
如果你想在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)
向您的 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)