9910

          單飛

             :: 首頁(yè) :: 聯(lián)系 :: 聚合  :: 管理

          IBM Container for ActiveX Documents - Eclipse Version

          但是我發(fā)現(xiàn)如果使用它打開含有中文名稱的文檔,就會(huì)拋異常,看了它的代碼,發(fā)現(xiàn)

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

          這樣會(huì)引發(fā)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) 評(píng)論(0)  編輯  收藏 所屬分類: Eclipse Plugin
          主站蜘蛛池模板: 白朗县| 四会市| 陇南市| 措勤县| 永春县| 中牟县| 于田县| 礼泉县| 天柱县| 青州市| 青岛市| 汤阴县| 仙游县| 中卫市| 滦南县| 易门县| 邓州市| 无极县| 镇原县| 偃师市| 泾源县| 邹城市| 鄂托克旗| 石景山区| 安仁县| 涿州市| 株洲市| 玉门市| 盱眙县| 吉首市| 开阳县| 沿河| 游戏| 阳城县| 鸡东县| 星子县| 铜山县| 巢湖市| 安陆市| 林甸县| 达日县|