怎么"好像有"?
出现什么错误你自己你看不到马?

解决方案 »

  1.   

    env->GetStringUTFChars(jstr, 0);
    取到的是UTF8编码的字符串
    如果有中文,就会有问题,有些字符被转成"?"
    我使用GetStringChars
    CString cStr = CString(jstringToWindows(env,jstr));///////////////////////////////////////////////////////////////////////////////
    //辅助函数:char* jstringToWindows(JNIEnv* env,jstring jstr);
    //功能:将Java的Unicode字符串转化成本地字符数组;
    ///////////////////////////////////////////////////////////////////////////////
    char* jstringToWindows(JNIEnv* env,jstring jstr )
    {
      AFX_MANAGE_STATE(AfxGetStaticModuleState());
      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 windowsToJstring( JNIEnv* env, char* str )
    //功能:将本地字符数组转化成Java的Unicode字符串;
    ///////////////////////////////////////////////////////////////////////////////
    jstring windowsToJstring( JNIEnv* env, char* str )
    {
      AFX_MANAGE_STATE(AfxGetStaticModuleState());
      jstring rtn = 0;
      int slen = strlen(str);
      wchar_t* buffer = 0;
      if( slen == 0 )
        rtn = env->NewStringUTF(str); //UTF ok since empty string
      else
      {
        int length = MultiByteToWideChar( CP_ACP, 0, (LPCSTR)str, slen, NULL, 0 );
        buffer = (wchar_t*)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;
    }