在从JAVA类方法传递中文信息到DLL的时候,C中用GetStringUTFChars只能取得utf-8格式的内容形成乱码,解决办法:构造一个函数jstringToWindows(),实现取得jstring的内容
char* jstringToWindows(JNIEnv* env, jstring jstr)
{
int length = env->GetStringLength(jstr);
const jchar* jcstr = env->GetStringChars(jstr, 0);
char* rtn = (char*)malloc(length * 2 + 1);
int size = 0;
size = WideCharToMultiByte(CP_ACP, 0, (LPCWSTR)jcstr, length, rtn, (length*2+1), NULL, NULL);
if(size <= 0)
return NULL;
env->ReleaseStringChars(jstr, jcstr);
rtn[size] = 0;
return rtn;
}
// 声明变量
const char* pkeyPath;
char* pmsg; //require to switch
// 取jstring传递的值
pkeyPath=env->GetStringUTFChars(keyPath,0);
pmsg=jstringToWindows(env,msg);
// 引用值
rc = CheckInfoFromBank( (char*)pkeyPath, pmsg);