大概因為開發環境是英文的緣故吧,做了這么久時間的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:




