gpt4 book ai didi

java - 如何将指向数组的指针从 JNI C 代码发送到 Java 代码?

转载 作者:太空宇宙 更新时间:2023-11-03 23:54:00 24 4
gpt4 key购买 nike

如何将指向数组的指针从 JNI C 代码发送到 Java 代码?例如:

JNI C 代码:

jclass cls = (*env)->GetObjectClass(env,obj);
jmethodID mid = (*env)->GetMethodID(env,cls,"print"," ?? "); // What should be the signature here ?
jvalue a1,*arr;
a1.i = 2002;
a1.f = 12.90;
a1.c = 's';
a1.j = 344554;
a1.b = TRUE;
arr = &a1;
(*env)->CallVoidMethodA(env,obj,mid,arr);

Java 函数:

public void print(?????) { // what should be the argument here ?
// add code here
}

java 函数应该如何接收指向数组的指针?

最佳答案

首先,您的代码有两个问题:

  1. arr 实际上不是数组(它指向单个 jvalue),因此没有理由通过指针而不是仅仅通过值来传递它。
  2. 所有那些 a1.X 赋值都是无用的,除了最后一个,因为 jvalue 是所有可能的原语和引用的并集类型。

下一步:不可能将原始 C 指针传递给 JNI(好吧,你可以,但你只能让 Java 将指针视为数字而不是对象)。您必须创建一个 Java 数组或缓冲区对象。如果您要创建引用数组,则数组很好,但必须复制内存;如果您希望 C 数组与 Java 缓冲区共享内存,缓冲区就很好。

关于java - 如何将指向数组的指针从 JNI C 代码发送到 Java 代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12757076/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com