JNI:如何从c++;到爪哇 我尝试用JNI,< /P>将一些数据从C++发送到java。 在C++中,我有: Array[0]: string name = "myName" int iterations = 16 float value = 15 ... etc 数组[0]: string name=“myName” 整数迭代=16 浮动值=15 ... 等

JNI:如何从c++;到爪哇 我尝试用JNI,< /P>将一些数据从C++发送到java。 在C++中,我有: Array[0]: string name = "myName" int iterations = 16 float value = 15 ... etc 数组[0]: string name=“myName” 整数迭代=16 浮动值=15 ... 等,c++,java-native-interface,C++,Java Native Interface,所以我想使用JNI返回Java上的所有数据,我正在尝试这个方法,但不起作用 JNIEXPORT jobjectArray JNICALL Java_com_testing_data_Main Activity_getDATA(JNIEnv*env,jobject obj) { //1º创建临时对象 jobject数据类 { jstring名称; jint迭代; jfloat值; }) jobject tempObject=env->NewObject(); /以C++格式获取数据 STD::v

所以我想使用JNI返回Java上的所有数据,我正在尝试这个方法,但不起作用

JNIEXPORT jobjectArray JNICALL Java_com_testing_data_Main Activity_getDATA(JNIEnv*env,jobject obj) { //1º创建临时对象 jobject数据类 { jstring名称; jint迭代; jfloat值; })

jobject tempObject=env->NewObject();
/以C++格式获取数据
STD::vector data = GETDATACALASS();//第一个错误,必须是C++类,我怎么才能得到它?
//我需要多少内存?
int dataSize=data.size();
//保留java格式的内存
jint tempValues[数据大小];
jobjectArray tempArray=env->NewObjectArray(dataSize,dataClass,0);//2º错误,它没有创建类
//在jarray中临时存储数据
对于(int i=0;i
}


此步骤是否正确以返回包含数据的结构/对象?如何修复错误?

将所有内容转换为JNI类型不是一个好主意。通常,最好创建一个对等对象,即指向本机资源的句柄指针,如Windows GUI编程中的hWnd。

您可以使用字符串将所有数据存储为序列数据。字段由分隔符(“:”例如)分隔,如下所示:

std::string sequenceData = "my name" + ":" + "16" + ":" + "15" + ...;

将此序列传递给java,然后将其拆分以获得所需的值。使用
String.split()
StringTokenizer

NewObjectArray的第二个参数必须是java类引用,并且您可以通过执行env->FindClass(“fullpackagelevelnameofyourjavalclass”)获得;尝试序列化数据或json字符串您不能像C中那样定义Java类。您应该研究Java中的类:
class MyData{String name;int iterations;float value;MyData(String name,int iterations,float value){this.name=name;this.iterations=iterations;this.value=value;}
然后您可以使用信息实例化该类,以便通过来填充Java数组。您可以通过从构建的
jobject
s设置
jobjectArray
元素。不客气。请注意,32位和64位操作系统之间的指针类型可能不同。
std::string sequenceData = "my name" + ":" + "16" + ":" + "15" + ...;