- 论坛徽章:
- 0
|
最近要做一个程序需要使用JNI(LINUX/AIX下),现在程序已经作完,但是因为要操作中文字符,所以需要写2个函数,一个将jstring的中文转到char,一个将char转成jstring。参考了一些文档现在jstringtochar的函数已经搞定。但是chartojstring的函数一直没有搞定,C程序编译通过的过,但是一运行就报We are unable to locate the function name symbol for the error
just occurred. Please refer to release documentation for possible
reason and solutions.
具体的代码如下:
#define CURRENT_ENCODE "GBK"
jstring CharTojstring(JNIEnv* env, char* str)
{
jstring rtn = 0;
jsize len = strlen(str);
jclass clsstring = (*env)->;FindClass(env,"java/lang/String" ;
//new encode string default "GBK"
jstring strencode = (*env)->;NewStringUTF(env,CURRENT_ENCODE);
jmethodID mid = (*env)->;GetMethodID(env,clsstring, "", "([BLjava/lang/String V" ;
jbyteArray barr = (*env)->;NewByteArray(env,len);
//API Ref :SetByteArrayRegion(JNIEnv *env, jbyteArray array, jsize startelement, jsize length, jbyte *buffer)
(*env)->;SetByteArrayRegion(env,barr,0,len,(jbyte *)str);
//call new String(byte[] b,String encode)
rtn = (jstring)(*env)->;NewObject(env,clsstring,mid,barr,strencode);
return rtn;
}
通过打印字符的方法,到(*env)->;SetByteArrayRegion(env,barr,0,len,(jbyte *)str);这句停掉,所以我觉得问题应该出在(*env)->;SetByteArrayRegion(env,barr,0,len,(jbyte *)str);这句上面。
但是我看了一个文档上的sample,里面也有关于SetByteArrayRegion的使用。在系统上是可以用的,所以应该不是SetByteArrayRegion函数的问题。我觉得可能是参数的引用上的问题。但是具体情况不明,希望对JNI比较熟悉的高手来帮小弟一把,万分感谢。 |
|