9910

          單飛

             :: 首頁 :: 聯系 :: 聚合  :: 管理

          IBM Container for ActiveX Documents - Eclipse Version

          但是我發現如果使用它打開含有中文名稱的文檔,就會拋異常,看了它的代碼,發現

          JNIEXPORT jint JNICALL Java_com_ibm_rcp_activex_ActivexDocumentWidget_createControl
              (JNIEnv 
          * env, jclass that, jint hwndParent, jstring filename, jstring progid, jint hwndShell,
              jintArray fileMenu, jintArray containerMenu, jintArray windowMenu,
              jint indexHelpMenu, jstring helpMenuItemPrefix)
          {
              ADD_TO_TRACE();
              AFX_MANAGE_STATE(AfxGetStaticModuleState());

              
          if (NULL == progid)
              {
                  
          return 0;
              }

              
          const char * lpszProgid = env->GetStringUTFChars(progid, 0);

              
          const char * lpszFileName = NULL;

              
          if (NULL != filename)
              {
                  lpszFileName 
          = env->GetStringUTFChars(filename, 0);
              }

          這樣會引發jni的字符亂碼問題,在參考了《〈Java與C之間通過JNI傳遞中文字符串〉》的解決方案后
          做了如下的改寫:
          char* jstringToWindows( JNIEnv *env, jstring jstr );


          if (NULL != filename)
              {
                  lpszFileName 
          = jstringToWindows( env, filename );
                  
          //lpszFileName = env->GetStringUTFChars(filename, 0);
              }


          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;
          }

          成功編譯后,可以正常使用了。


          posted on 2008-08-09 22:52 單飛 閱讀(355) 評論(0)  編輯  收藏 所屬分類: Eclipse Plugin
          主站蜘蛛池模板: 海淀区| 咸阳市| 长汀县| 丘北县| 九龙城区| 甘泉县| 定远县| 临潭县| 大连市| 佛山市| 元阳县| 图木舒克市| 运城市| 商水县| 辰溪县| 靖远县| 无极县| 当涂县| 江西省| 安陆市| 浠水县| 遂川县| 永嘉县| 辽宁省| 囊谦县| 陇南市| 东兴市| 梁平县| 桐庐县| 九江县| 宣武区| 盐源县| 乌拉特中旗| 绥德县| 东阿县| 犍为县| 彩票| 铁岭市| 仙桃市| 奇台县| 大城县|