gpt4 book ai didi

android - 使用 native C++ 对象时如何使 JNI 方法调用不是静态的?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:16:07 24 4
gpt4 key购买 nike

我有以下 JNI 包装器 C++ 代码:

#include "map_container.h"
extern "C" {
JNIEXPORT void JNICALL Java_com_map_Map_openMapNative(JNIEnv* env, jobject thiz, jstring path);
};

static map_container* map = NULL;

void Java_com_map_Map_openMapNative(JNIEnv* env, jobject thiz, jstring path)
{
const char* filename_utf8 = env->GetStringUTFChars(path, false);

if ( mapview )
{
delete mapview;
mapview = NULL;
}

mapview = new map_container((char*)filename_utf8);

if (filename_utf8)
{
env->ReleaseStringUTFChars(path, filename_utf8);
}
}

并将 com.map.Map.openMapNative 声明为静态,这意味着我可以一次操作一张 map 。我如何修改此 C++ 代码,使 map_container* map 变得不是静态的并且属于 com.map.Map 类的确切实例? map_container完全是C++类,在Java中没有反射。

最佳答案

我正在使用 SWIG生成所有必要的包装代码。您只需在接口(interface)定义文件中定义要包装的类和函数,然后让 SWIG 为您创建所有必需的 C++ 和 Java 代码。强烈推荐!手动编写 JNI 代码太无聊且容易出错恕我直言。查看 SWIG docs for Java , 它非常易于使用。

关于android - 使用 native C++ 对象时如何使 JNI 方法调用不是静态的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4663929/

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