ImeLib v0.3 已發布

ImeLib v0.3 已發布至 CodePlex 網站,這次的主要變動如下:
  • 增加對 64 位元 Windows 作業系統的支援。(v0.2 無法在 64 位元作業系統上正常執行)
  • 增加 Phantom 建置腳本。
  • 增加 ASP.NET 範例程式:ImeLibDemoWeb。
這次發布了兩個下載包:
  • ImeLib-bin-v0.3.zip :只包含可執行檔(DLL、範例程式的執行檔)。
  • ImeLib-src-v0.3.zip :包含完整的原始碼。
需特別注意的是,ImeLib-bin-v0.3.zip 裡面有兩個資料夾,分別是 x86 和 x64,各代表供 32 位元和 64 位元作業系統使用的檔案。如果程式要在 64 位元的 Windows 作業系統上執行,卻使用了 32 位元的版本,程式執行時就會出現「Monoruby position array is NULL!」或「數學運算溢位」的錯誤。

如果要在 ASP.NET 應用程式中使用 ImeLib,則必須注意部署時的 IIS 設定:應用程式所屬之 application pool 的身分識別不可用預設的 ApplicationPoolIdentity 或 NETWORK SERVICE,而必須使用更高權限的帳戶(例如 LocalSystem),否則會出現錯誤:
發生未處理的例外狀況,處理序已終止。
Application ID: /LM/W3SVC/3/ROOT/ImeLibDemoWeb
Process ID: 5480
Exception: System.Runtime.InteropServices.COMException
Message: 錯誤 HRESULT E_FAIL 已經從呼叫傳回至 COM 元件。
StackTrace:    於 ImeLib.WinApi.MsIme.IFELanguage.Open()
   於 ImeLib.MsImeFacade.OpenIFELanguage()
   於 ImeLib.MsImeFacade..ctor(ImeClass imeClass)
   於 _Default.GetBopomofo(Object o) 於 d:\2\x64\ImeLibDemoWeb\Default.aspx.cs: 行 35
   於 System.Threading.ExecutionContext.runTryCode(Object userData)
   於 System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(TryCode code, CleanupCode backoutCode, Object userData)
   於 System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
   於 System.Threading.ThreadHelper.ThreadStart(Object obj)

5 則留言:

  1. 感謝大師你的ImeLib!
    我下載了ImeLib-src-v0.3編譯與執行都沒問題。
    想請問一下它可以在BackgroundWorker下run嗎?
    在我ImeLibDemo專案的Form1上加了一個BackgroundWorker,想說btnGetBopomofo按下後由背景執行,結果出現"不支援此種介面 Error code: 0x80004005"。
    程式碼片段:
    private void btnGetBopomofo_Click(object sender, EventArgs e)
    {
    worker.RunWorkerAsync(txtInput.Text);
    }
    private void worker_DoWork(object sender, DoWorkEventArgs e)
    {
    using (MsImeFacade ime = new MsImeFacade(ImeClass.Taiwan))
    {
    string[] result = ime.GetBopomofo(e.Argument.ToString());
    }
    }

    回覆刪除
  2. 用背景執行緒跑啊...我沒試過,但我想應該是不行吧!

    回覆刪除
  3. 請問一下,我輸入"唸",回傳卻是"ㄉㄧㄢˋ",是哪裡有問題呢?謝謝

    回覆刪除
  4. 呃..."唸" 回傳 "ㄉㄧㄢˋ",這太奇怪了,我也判斷不出來耶!

    回覆刪除
  5. 謝謝你的程式, 建議昇成.Net 4.0 的版本, MsIme.cs 中 MorphResult 結構直接宣告 x86 及 x64版, Facde 在叫時 先 判斷 Environment.Is64BitOperatingSystem 來叫不同的 delegate (改Func 也行啦!) 另外加包 nuget ^_^

    回覆刪除

技術提供:Blogger.