我一直試圖從JNI調用中返回一個ARABIC字符串。從JNI中返回阿拉伯數字
Java方法如下:
private native String ataTrans_CheckWord(String lpszWord, String lpszDest, int m_flag, int lpszReserved);
lpszWord:輸入英文
lpszDest:忽略
M_FLAG:忽略
lpszReserved:忽略
現在,當我使用JAVAH生成的頭文件我得到一個帶有這個簽名的C++頭文件
JNIEXPORT jstring JNICALL Java_MyClass_ataTrans_1CheckWord (JNIEnv* env, jobject, jstring, jstring, jint , jint)
現在,在此C++代碼我有語句,如本
JNIEXPORT jstring JNICALL Java_MyClass_ataTrans_1CheckWord(JNIEnv* env, jobject, jstring jstrInput, jstring, jint , jint)
{
char aa[10];
char* bb;
char** cc;
bb = aa;
cc = &bb;
jstring tempValue;
const char* strCIn = (env)->GetStringUTFChars(jstrInput , &blnIsCopy);
int retVal = pDllataTrans_CheckWord(strCIn, cc, m_flag, lpszReserved);
printf("Orginal Arabic Conversion Index 0: %s \n",cc[0]); //This prints ARABIC properly
tempValue = (env)->NewString((jchar*)cc[0],10); // convert char array to jstring
printf("JSTRING UNICODE Created : %s \n",tempValue); //This prints junk
return tempValue;
}
相信阿拉伯文內容是指向指針的指針「CC」的內部。最後在我的java代碼中,我有這樣的一個電話
String temp = myclassInstance.ataTrans_CheckWord("ABCDEFG", "",1, 0);
System.out.println("FROM JAVE OUTPUT : "+temp); //Prints Junk
我只是不能返回一些阿拉伯字符出我的JAVA代碼。我正在做什麼錯?我試過了其他各種替代品,如
tempValue = env->NewStringUTF("شسيشسيشسيشس");
並返回tempValue但沒有運氣。它總是在JAVA端的垃圾。
謝謝Erik.Brilliant。像魅力一樣工作。我只做了如下修改:\t \t MultiByteToWideChar(1256,0,cc [0],-1,Buffer,Len); – Franklin 2011-03-16 10:27:26
@Franklin:好好:) – Erik 2011-03-16 10:29:59