2012-09-07 38 views
12

我有使用Microsoft Word互操作的一個簡單的測試程序,從同義詞辭典獲得詞義內存異常不足:get_SynonymInfo拋出了一些話

using System; 
using Word = Microsoft.Office.Interop.Word; 

class Program 
{ 
    static void Main(string[] args) 
    { 
     string word = "elite"; // = "common"; 

     var app = new Word.Application(); 
     var synInfo = app.SynonymInfo[word, Word.WdLanguageID.wdEnglishUS]; 

     if (synInfo.Found && synInfo.MeaningCount > 0) 
     { 
      foreach (var meaning in synInfo.MeaningList as Array) 
       Console.WriteLine(meaning.ToString()); 
     } 

     // release memory and quit Word app... (see below) 
    } 
} 

與Microsoft Office 2010和Microsoft Office 2013預覽試過,用.NET 4.0在Visual Studio 2010中,引用Office 12 PIA。對於超過15萬個不同的單詞,這就像一個魅力。但我注意到,一段話,法get_SynonymInfo拋出一個異常:

Unhandled Exception: System.Runtime.InteropServices.COMException: Insufficient memory or disk space. 
    at Microsoft.Office.Interop.Word.ApplicationClass.get_SynonymInfo(String Word, Object& LanguageID) 
    at WordInteropTest.Program.Main(String[] args) in Program.cs:line 11 

我知道這些話是引起異常:

  • 精英(但「精英」的作品)
  • 附近
  • 塔克斯
  • onboar d
  • 嚇壞

這有什麼好做的例外,但給一個完整的源代碼,我不釋放內存和正確退出的Word應用程序。當我退出測試程序時,進程列表中沒有剩餘msword.exe。

 // release memory and quit Word app... (continuing from above) 
     System.Runtime.InteropServices.Marshal.FinalReleaseComObject(synInfo); 
     app.Quit(Word.WdSaveOptions.wdDoNotSaveChanges); 
     System.Runtime.InteropServices.Marshal.FinalReleaseComObject(app); 

在Microsoft Word中使用同義詞庫手動爲所有單詞提供正確的結果。

如何避免異常並使用Interop代碼獲得結果?有沒有使用其他API的有效替代方案?


更新:我在local programming web forum告訴記者,該代碼可以使用Office 2007的讓我吃驚,它的作用。但是在這個問題中提到的Office 2010和2013 Preview不起作用,至少在我的電腦/虛擬機上不行。然後我嘗試引用Office 14 PIA而不是Office 12,但對於Office 2013 Preview,其行爲相同。

+1

它似乎可能是Word的一個長期存在的問題,因爲它在2013年仍然存在(AFAICT)。此https://groups.google.com/forum/?hl=zh-CN&fromgroups=#!topic/microsoft。 public.office.developer.automation/ex58NtYsJmc建議使用Excel。 – Fionnuala

+0

錯誤看起來是一樣的,但是來自該線程的「蒼白」和「放氣」都適用於我。 –

+2

我認爲可能的問題是所有這些單詞在意義列表中都有同形異義詞。例如,「精英」有「最好(名詞)」和「最佳(形容詞)」。 SynonymInfo接口不能代表兩者。 Word 2007將此顯示爲「同義詞庫」面板中的兩個不同的條目,但Word 2010和2013 Preview將此顯示爲組合的「最佳(名詞/形容詞)」條目。 –

回答

8

我可以在Word 2010上的計算機上重現此問題。錯誤代碼(HResult)爲-21468224640x800A16C0,在互聯網上找不到任何東西。

由於Remou筆記,這個問題已經存在back in 2002

它發生IFF Word中的同義詞列表包含兩個或多個類型的一個或多個同義詞(例如ADJ。/ v之間。ñ。/ v之間。ADJ。/ N。) 。語言/字典無關緊要。例如,onboardwdEnglishUS中返回錯誤,但不在wdEnglishUK中,因爲後者不知道該字。其他詞在兩種詞典中都存在,並且在任何情況下都會出現錯誤。

顯然這是一個錯誤,並且只是Word互操作的一個問題,因爲Word本身顯示它沒有任何問題。據我所知,這是interop允許你獲取同義詞信息的唯一方式,而且沒有解決辦法。

0

如果您在MS Word中輸入「不好」的單詞並檢查其同義詞,結果如何?它在那裏工作嗎?你可能會得到一個額外的對話框,在API中處理不好嗎?

+1

如果您在更新之前閱讀第二行,它會說:「在Microsoft Word中手動使用同義詞庫可以爲所有單詞提供正確的結果。」沒有額外的對話框。 –

相關問題