System.AccessViolationException: попытка чтения или записи в защищенную память - PullRequest
2 голосов
/ 30 апреля 2010

Я получаю следующее исключение при попытке «найти и заменить» в Word 2007, работающем в Windows Vista или Windows 7.

System.AccessViolationException: Попытка чтения или записи защищена объем памяти. Это часто является показателем эта другая память повреждена. в Microsoft.Office.Interop.Word.Find.Execute (Объект & FindText, Object & MatchCase, Object & MatchWholeWord, Object & MatchWildcards, Object & MatchSoundsLike, Object & MatchAllWordForms, Object & Forward, Объект & Обтекание, Объект & Формат, Объект & ReplaceWith, Object & Replace, Object & MatchKashida, Object & MatchDiacritics, Object & MatchAlefHamza, Object & MatchControl)

Есть ли какое-то решение для этого?

Я использую .NET3.5 C #.

********** ***************** КОД 1011 *

public static Application Open(string fileName)
{
    object fileNameAsObject = (object)fileName;
    Application wordApplication;            
    wordApplication = new Application();
    object readnly = false;
    object missing = System.Reflection.Missing.Value;
    wordApplication.Documents.Open(
        ref fileNameAsObject, ref missing, ref readnly, 
        ref missing,ref missing, ref missing, ref missing, 
        ref missing,ref missing, ref missing, ref missing, 
        ref missing,ref missing, ref missing, ref missing, 
        ref missing
    );

    return wordApplication;             
}

private static void ReplaceObject(
    ref Application wordApplication, 
    object ObjectTobeReplaced, object NewObject)
{
    // ++++++++Find Replace options Starts++++++

object findtext = ObjectTobeReplaced;
    object findreplacement = NewObject;
    object findforward = true;
    object findformat = false;
    object findwrap = WdFindWrap.wdFindContinue;
    object findmatchcase = false;
    object findmatchwholeword = false;
    object findmatchwildcards = false;
    object findmatchsoundslike = false;
    object findmatchallwordforms = false;
    object replace = 2; //find = 1; replace = 2
    object nevim = false;
    Range range = wordApplication.ActiveDocument.Content;
    range.Find.Execute(
        ref findtext, ref findmatchcase, ref findmatchwholeword, 
        ref findmatchwildcards,ref findmatchsoundslike, 
        ref findmatchallwordforms, ref findforward, ref findwrap,
        ref findformat, ref findreplacement, ref replace, 
        ref nevim, ref nevim, ref nevim, ref nevim
        );

Ответы [ 2 ]

2 голосов
/ 30 апреля 2010

Проблема была исправлена ​​после переустановки Office:) ... Но все еще не знаю, что вызвало проблему

1 голос
/ 30 апреля 2010

На этот вопрос почти невозможно ответить без показа кода, который у вас есть.

(диким) предположением может быть то, что вы предоставляете некоторый класс / структуру при взаимодействии с Word, который не инициализирован, и Word затем пытается получить доступ к неинициализированной памяти.

...