大概因为开发环境是英文的缘故吧,做了这么久时间的SWT-Extension,直到今天才发现存取中文都是乱码。不过显而易见的是Test Case做得太少了,毕竟是自己的开源项目,在上面投入的是兴趣,而不是精力。虽然一直在弄,但动辄就几个月没有commit,而且到现在也没有一个正式版发布。本来可以积累一点user的,现在估计也都跑光了。
下面这段代码用于JNI中jstring和Window char之间转换:
char* jstringToNative( 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;
}
jstring nativeTojstring( JNIEnv* env, char* str )
{
  jstring rtn = 0;
  int slen = strlen(str);
  unsigned short * buffer = 0;
  if( slen == 0 )
    rtn = env->NewStringUTF( str ); 
  else
  {
    int length = MultiByteToWideChar( CP_ACP, 0, (LPCSTR)str, slen, NULL, 0 );
    buffer = (unsigned short *)malloc( length*2 + 1 );
    if( MultiByteToWideChar( CP_ACP, 0, (LPCSTR)str, slen, (LPWSTR)buffer, length ) >0 )
      rtn = env->NewString(  (jchar*)buffer, length );
  }
  if( buffer )
  free( buffer );
  return rtn;
}
JNI 用起来实在太麻烦了,比我做Java开发效率实在低得太多,各种各样的类型转换,我头都晕了…… 另外JNI好像是SUN中国研究院搞的,怎么就没有提供一个好的中文解决方案?
Eclipse SWT Extension snapshot:




