У меня есть простая тестовая программа, использующая 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 Preview, используя .Net 4.0 в Visual Studio 2010, ссылаясь на 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
Я знаю, что эти слова вызывают исключение:
- элита (но работает "элиты" )
- около
- складку
- Tucks
- ходьба
- на борту
- ужаснулся
Это не имеет никакого отношения к исключению, но чтобы предоставить полный исходный код, я освобождаю память и правильно закрываю приложение 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?
Обновление: Мне сказали на местном веб-форуме по программированию, что этот код работает с Office 2007. И, к моему удивлению, он делает, Но с Office 2010 и 2013 Preview, как указано в этом вопросе, он не работает, по крайней мере, на моих компьютерах/виртуальных машинах. Затем я попытался использовать Office 14 PIA вместо Office 12, но с Office 2013 Preview это ведет себя одинаково.