我正在开发一个 Android 应用程序,并且正在从 C++ 库接收相机数据。我需要将这些数据从 C++ 发送到 Java 代码。为此,我使用 JNI。我可以在 Java 中从 JNI 和 C++ 数据中设置不同的字段(例如相机的名称或类型),但我无法设置 ID 字段,因为它是一个数组uint8_t。
我怎样才能做到这一点?
我已经尝试了多种方法来执行此操作,但每次我都得到一个SIGSEGV error无效地址。对于我正在使用的其他领域
env->Set<Primitives>Field(jobject, jfieldID, value)
Run Code Online (Sandbox Code Playgroud)
方法,但没有类似int数组的方法,是吗?因此,我尝试通过调用类中的方法并提供数组int作为参数来设置此字段,但此函数失败并返回SIGSEGV error.
然后,我在网上搜索并尝试通过设置该字段
env->GetObjectField(jobject, jfieldID)
Run Code Online (Sandbox Code Playgroud)
和
env->SetIntArrayRegion(jintArray, start, end, myIntArray)
Run Code Online (Sandbox Code Playgroud)
但这里第一个方法总是返回 null。
JavaVM * mJVM; //My Java Virtual Machine
jobject mCameraObject, mThreadObject; //Previously initialize to call functions in the right thread
void onReceiveCameraList(void *ptr, uint32_t /*id*/, my::lib::Camera *arrayCamera, uint32_t nbCameras) {
JNIEnv *env;
mJVM->AttachCurrentThread(&env, nullptr);
if …Run Code Online (Sandbox Code Playgroud)