gpt4 book ai didi

java - JNI 如何将 java 对象数组传递给相同对象类型的 c++ 数组

转载 作者:行者123 更新时间:2023-11-27 23:38:03 25 4
gpt4 key购买 nike

我的 Java 代码中有一个类型为 Foo 的数组,我想将其传递给 C++。在 C++ 代码中,我还有一个名为 Foo 的类。我只想通过 JNI 传输这个数组。

我有一个这样的电话:

#include "headers/Foo.h"

extern "C"
JNIEXPORT void
JNICALL Java_main_Main_Interface(JNIEnv *env, jobject obj, jobjectArray foo){
jint size = env->GetArrayLength(foo);
Foo cfoo[size];
for(int i = 0; i < size; i++){
cfoo[i] = env->GetObjectArrayElement(foo, i);
}
}

然而,这给我一个错误:Type 'Foo' and 'jobject' are not compatible

我明白这个错误,但我应该怎么做才能消除它?我应该将 jobject 转换为 Foo 类型吗? c++会那样理解对象吗?还是我错过了一些 JNI 调用?

最佳答案

I understand this error

不,我不认为你这样做。

C++ 代码中名为 Foo 的类型与 Java Foo 无关。具有相同的名称不会在 JNI 边界上产生这种效果,无论类型成员的相似性或不同性如何。因此,您的问题不仅仅是一个句法问题,而是一个更基本的问题。

but what should I do to eliminate it? should I cast the jobject to type Foo? will c++ understand the object that way? or am I missing some JNI calls?

这在某种程度上取决于 C++ Foo 的性质,以及您希望它如何工作。

一种选择是通过复制相应 Java Foo 的所需成员来初始化每个 C++ Foo。这将涉及 JNI 调用以读取对象字段或调用 jobject 上的方法,或两者​​兼而有之。详细信息取决于两个 Foo

或者,您可以使用 C++ 方法重写 C++ Foo 或将其子类化为代表相应 Java Foojobject 的包装器通过 JNI 调用委托(delegate)给 jobject。这实际上与另一个几乎相同,但具有更精细的粒度,因此具有不同的性能权衡。

关于java - JNI 如何将 java 对象数组传递给相同对象类型的 c++ 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57726147/

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