c# - get_SynonymInfo 某些词抛出内存不足异常

标签 c# ms-word office-interop

我有一个简单的测试程序,它使用 Microsoft Word Interop 从同义词词典中获取词义:

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 预览版,在 Visual Studio 2010 中使用 .Net 4.0,引用 Office 12 PIA。对于超过 150,000 个不同的单词,这就像一个魅力。但我注意到对于某些词,方法 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

我知道这些词会导致异常:

  • 精英(但“精英”有效)
  • 附近
  • 抱膝
  • 褶皱
  • 走路
  • 加入
  • 吓坏了

这与异常无关,但为了给出完整的源代码,我确实释放内存并正确退出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 预览版,如这个问题所述,它不起作用,至少在我的计算机/VM 上不起作用。然后我尝试引用 Office 14 PIA 而不是 Office 12,但对于 Office 2013 Preview,这表现相同。

最佳答案

我可以在我的计算机上使用 Word 2010 重现此问题。错误代码 (HResult) 为 -21468224640x800A16C0,在其上找不到任何内容互联网。

作为Remou注意,这个问题已经存在back in 2002 .

碰巧 iff Word 中的同义词列表包含两种或多种类型的一个或多个同义词(例如 adj./v.n./v .adj./n.)。语言/词典无关紧要。例如,onboardwdEnglishUS 中返回错误,但在 wdEnglishUK 中不返回,因为后者不认识这个词。其他词存在于两个词典中,并且在任何一种情况下都会给出错误。

显然这是一个错误,并且只是 Word 互操作的问题,因为 Word 本身显示这一切都没有问题。据我所知,这是互操作允许您获取同义词信息的唯一方式,并且没有解决方法。

关于c# - get_SynonymInfo 某些词抛出内存不足异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12314157/

相关文章:

c# - 如何在 C# 中访问字符串的一部分并将其放回去?

c# - 传递两个模型查看

c# - Reactive Extensions 中的 SequenceEqual 如何工作

C# 互操作 : How to determine a range of a Field?

c# - 识别对互操作库(Doument.Paragraphs 等)中对象的唯一引用

c# - 如何加快从 C# 生成 Word 文件的速度?

c# - VSTO 加载项,同时访问 Excel 和 Word

c# - 从 .NET 3.5 更改为 4.5.1 时无法加载文件或程序集 'Interop.Microsoft.Office.Core, Version=2.4.0.0, ...'

c# - 在 C# 中判断生日是否已经过了 6 个月

复制/粘贴到 Word 文档中的 Excel VBA 代码导致我的代码失败