gpt4 book ai didi

java - Android NDK,保持实时 C++ 对象

转载 作者:IT老高 更新时间:2023-10-28 22:36:25 25 4
gpt4 key购买 nike

我遇到了以下问题。我想编写一个使用我的遗留 C++ 类的 Android 应用程序。我必须在整个应用程序生命周期内保持 C++ 对象处于 Activity 状态。

我用 C# 编写了一个类似的应用程序,并通过将指向 C++ 类的指针传递给 C# 并使用 IntPtr 将其存储在那里来解决了这个问题。然后,当我想调用该对象的方法时,我只需将该指针再次传递给 C++,转换为类指针并调用它的方法。

如何在 Java 和 Android NDK 中获得类似的结果? Java 是否支持存储指针?

最佳答案

是的,您可以执行与在 C# 中所做的完全相同的操作。

创建新的 C++ 对象:

jlong
Java_package_name_new(JNIEnv *, jobject) {
return (long)(new CPP_Object());
}

您可以将此方法的返回值存储在 Java ptr 变量中,并将其传递给所有需要它的 NDK 方法:

void
Java_package_name_doSomething(JNIEnv *, jobject, jlong ptr) {
CPP_Object *obj = (CPP_Object *)ptr;
// do whatever you want with the object
}

最后用类似这样的方式删除它:

void
Java_package_name_delete(JNIEnv *, jobject, jlong ptr) {
delete (CPP_Object *)(ptr);
}

除了将 ptr 传递给所有需要它的方法,您还可以使用 SetLongFieldGetLongField< 直接从 NDK 部分获取并设置它 方法:这允许仅从代码的 NDK 部分管理 Java ptr 变量,我发现它更安全且更易于管理。

关于java - Android NDK,保持实时 C++ 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19808610/

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