9910

          單飛

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

          IBM Container for ActiveX Documents - Eclipse Version

          但是我發(fā)現(xiàn)如果使用它打開含有中文名稱的文檔,就會拋異常,看了它的代碼,發(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);
              }

          這樣會引發(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 單飛 閱讀(355) 評論(0)  編輯  收藏 所屬分類: Eclipse Plugin
          主站蜘蛛池模板: 福安市| 平潭县| 屏南县| 车险| 正蓝旗| 静宁县| 桦南县| 威海市| 旬阳县| 乐至县| 青铜峡市| 勃利县| 右玉县| 阿拉善盟| 凉山| 泽州县| 无极县| 香格里拉县| 金溪县| 保德县| 凤城市| 大新县| 江都市| 乌审旗| 涟源市| 吴桥县| 辉县市| 丹东市| 阳江市| 互助| 开原市| 合肥市| 武汉市| 东乡族自治县| 京山县| 青铜峡市| 阳泉市| 寻乌县| 漳州市| 苏州市| 通河县|