在cppjni中存储obejcts/strings

jjhzyzn0  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(264)

在编写android代码时,cpp中最好的方法是什么。我在每个帧上运行一些opencv代码。我想保留多个对象,但我并不总是想重新创建它们。例如字符串,比如路径、opencv人脸检测器类。目前我只保留了一个类,我将它作为指针从java传递到cpp。但现在我想补充更多,这似乎不是一个好主意。
关于如何有效解决这个问题有什么提示吗?
目前,我正在做类似的事情:android ndk,保留c++对象
我以前已经不是这个解决方案的粉丝了,但是现在我想要有多个对象,这使得代码更加混乱

6vl6ewon

6vl6ewon1#

您可以创建一个c++类来保存您需要的所有对象作为成员。
头文件:

class MyCppClass
{
public:
    MyCppClass();
    ~MyCppClass();
    //Any other methods you need

    std::string mPath;
    //Any other member variables
}

源文件:

static MyCppClass gMyClass;

//JNI
extern "C" 
{
    //Your JNI functions can use gMyClass
    void
    Java_package_name_initPath(JNIEnv *env, jobject obj, jstring jPath) 
    {
        const char* pPath = env->GetStringUTFChars(jPath, JNI_FALSE);
        gMyClass.mPath = pPath; //Of course you can use setters/getters if you want
        env->ReleaseStringUTFChars(jPath, pPath);
    }
}

//MyCppClass implementation
MyCppClass::MyCppClass()
{
    //...
}

现在您的gmyclass对象包含作为成员的路径,您不必在本机和java之间来回传递它。

相关问题