本地代码中创建java对象
//第二个参数为构造方法
jobject NewObject(jclass clazz, jmethodID methodID, ...)
示例代码(使用默认构造器创建对象):
jclass clazz_date=ent->FindClass("java/util/Date");
jmethodID mid_date=env->GetMethodID(clazz_date,"<init>","()V");
jobject now=env->NewObject(clazz_date,mid_date);
java字串和本地代码中字串
//utf-16
GetStringChars
//utf-8
GetStringUTFChar
示例代码:
//参数一:指向java中string对象的jstring变量
//参数二:boolean指针 是否对java中的String 对象进行拷贝
const jchar* GetStringChar(jstring str,jboolean* copied);
const char* GetStringUTFChar(jstring str,jboolean* copied);
注:开新内存,将java中的string拷贝到这个内存中,然后返回这个内存的指针
不要改变这个内存的内容,会破坏string在java中始终是个常量的原则
在不使用的时候要使用releaceStringChars/releaceStringTUFChar释放内存
//参数一:本地字串来源 参数二:本地字串
ReleaceStringChars(jstring jstr,const jchar* str);
ReleaceStringTUFChars(jstring jstr,const char* str);
const jchar* GetStringCritical(jsring str,jboolean* copied);
void ReleaseStringCritical(jstring jstr,const jchar* str);
//以下函数不会分配内存不会抛outOfMemoryError异常
GetStringRegion
GetStringUTFRegion
示例代码如下:
GetStringRegion(jstring str,jsize start,jsize len, char* buffer);
GetStringUTFRegion(jstring str,jsize start,jsize len, jchar* buffer);
其他的字符串函数
jstring NewString(const jchar* str,jsize len);
jstring NewStringUTF(const char* str);
jsize GetStringLength(jstring str);
jsize GetStringUTFLength(jstring str);
JNI学习笔记四
最新推荐文章于 2024-10-07 11:22:30 发布