java jni c++ 工作过程中常用的一些东西,在这里总结一下
获取field
env->getFieldID(class,"name",field类型);
获取method
env->getMethodID(class,"方法名",(参数)返回类型 );
这里需要搞一个类型问题
基本数据类型
还有三个特殊的string object arraylist
string---Ljava/lang/String
object---Ljava/lang/Object
array---Ljava/util/ArrayList
如果没有返回值的话就用V,其中还有一个比较特殊情况,如果返回值是你定义的一个类型,那么返回的类型就是L包名+类名,包名之间要将 “.” 换成 “/”
工作过程中遇到一个问题
jstring---string--std::string---const char
jfield id = env->getFieldId();这个id是string的
有一个object想得到这个field
jobject string = env->callObjectField(obj,id)
强转:jstring newString = (jstring) string;
这样的话就简单了
下面介绍我常用的这三个转换的方式
jstring string = env->newStringUTF(const char *);
std::string string = const char *str;
const char* str = env->GetStringUTFChars(jstring,0);
上述这三个公式就可以相互转换
这里有一个需要注意的问题 local reference table overflow (max=512)
可以看这个博客介绍https://blog.csdn.net/xyang81/article/details/44873769
env->DeleteLocalRef(startdes);
这个东西可以解决问题