c#word2007替换方法异常:System.AccessViolationException 尝试读取或写入受保护的内存。这通常指示其他内存已损坏

潘少博 2015-05-26 10:32:55

我在使用C#做word 功能开发时,遇到这个问题:使用 oDoc.Content.Find.Execute 方法替换指定内容。但是程序会抛出异常:

System.AccessViolationException”类型的未经处理的异常在 中发生
其他信息: 尝试读取或写入受保护的内存。这通常指示其他内存已损坏。


word2007 sp3,没装过其他版本。

测试代码:以下代码放到button中就可用
代码:

private void testToolStripMenuItem_Click(object sender, EventArgs e)
{
string file = "d:/test.doc";
if (!File.Exists(file))
return;

object oMissing = System.Reflection.Missing.Value;
//打开文件
Word.Application oWord;
Word.Document oDoc;
oWord = new Word.Application();
oDoc = oWord.Documents.Open("d:/test.doc");

oDoc.Content.Find.Replacement.ClearFormatting();//此处必报错System.AccessViolationException
oDoc.Content.Find.ClearFormatting();
oDoc.Content.Find.Text = "${replace}";//需要被替换的文本
oDoc.Content.Find.Replacement.Text = "呵呵";//替换文本

//执行替换操作
oDoc.Content.Find.Execute(ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing,
ref oMissing, ref oMissing, ref oMissing, ref oMissing, Word.WdReplace.wdReplaceAll, ref oMissing, ref oMissing, ref oMissing, ref oMissing);

oDoc.SaveAs(file);
oDoc.Close();
oWord.Quit();
}

word中的内容:替换这个内容${replace},恩

尝试直接使用 oDoc.Content.Find.Execute方法,也不行,抛出异常的位置是oDoc.Content.Find。也就是只要是Find内容就会出错。
在网上查了很多,都没有找到解决办法。在线等。
...全文
555 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
日拱一两卒 2018-07-10
  • 打赏
  • 举报
回复
C#遇到这种问题的亲们,
看一下你们是否有两个线程共同访问一个公共对象的情况,
在unsafe操作非托管内存的情况下,第一个线程使用完这个对象就把这个对象清空,这时候第二个线程正在使用这个对象,就会因为内存中找不到这个内存区域而报错:“尝试读取或写入受保护的内存。这通常指示其他内存已损坏”。
在C#托管内存中,找不到对象报错是“未将对象引用设置到对象的实例”,而非托管内存的找不到对象报错是:尝试读取或写入受保护的内存。这通常指示其他内存已损坏
潘少博 2015-05-27
  • 打赏
  • 举报
回复
引用 2 楼 Z65443344 的回复:
测试代码:以下代码放到button中就可用 没有道理啊
的确没有道理,但绝对是事实。 问题已解决。 重装office2007 。在不打补丁和打sp3补丁下测试都没有再报这个问题。
於黾 2015-05-26
  • 打赏
  • 举报
回复
测试代码:以下代码放到button中就可用 没有道理啊
啊拉丁的鱼 2015-05-26
  • 打赏
  • 举报
回复
oWord.Documents.Open("d:/test.doc"); 试一下指定读写打开模式呢?

111,098

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧