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 單飛 閱讀(351) 評論(0)  編輯  收藏 所屬分類: Eclipse Plugin
          主站蜘蛛池模板: 北京市| 开封市| 孝昌县| 泰兴市| 翼城县| 辽阳县| 东阳市| 福鼎市| 五常市| 泰州市| 大兴区| 城口县| 蒙山县| 西峡县| 洪洞县| 肇庆市| 井冈山市| 凉山| 罗山县| 凯里市| 奈曼旗| 乐昌市| 额敏县| 镇江市| 孟州市| 九寨沟县| 南城县| 白玉县| 镇巴县| 屏东县| 泽州县| 海盐县| 西华县| 南漳县| 民权县| 霍林郭勒市| 平顶山市| 永安市| 大石桥市| 山西省| 平利县|