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内容就会出错。
在网上查了很多,都没有找到解决办法。在线等。
...全文
657 4 打赏 收藏 转发到动态 举报
写回复
用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"); 试一下指定读写打开模式呢?
打开链接下载源码: https://pan.quark.cn/s/64cfd9352cf7 VLC播放器是一款备青睐的跨平台开源多媒体播放软件,其3.0.11版本在继承既有卓越功能的同时,显著优化了对特定音视频编码格式的兼容性,尤其着重于对AVS+和DRA这两种源自中国的编码标准的支持。这一改进使得VLC不仅能够处理国际上通行的H264和H265视频编码,以及AC3音频编码,更能契合国内用户的播放需求,流畅播放采用AVS+和DRA编码的多媒体资料。1. **AVS+(Advanced Video Coding Plus)**:AVS+是中国自主设计的一种高效视频编码规范,其核心目标在于提升编码效能,减少带宽占用,特别适用于高清及超高清视频的传输。相较于早期的AVS技术,AVS+在编码效能、图像质量和实现难度上取得了更优的均衡,为国内的电视广播、IPTV、网络视频等领域提供了定制化的解决方案。2. **DRA(Digital Radio Audio)**:DRA是一种基于数字音频广播的高保真音频编码技术,由中国独立研发而成。该技术支持多样化的码率和声道布局,确保提供卓越的音频体验,同时具备优异的网络适应性及低延迟表现,适用于广播、互联网音频传输等多种使用场景。3. **H264(亦称AVC)**:H264是一种高效视频压缩规范,广泛应用于在线视频、流媒体服务、蓝光光盘等领域,其显著优势在于能够在较低的码率下呈现高清晰度的视频画面。4. **H265(亦称HEVC)**:作为H264的升级版标准,H265在压缩效率上实现了进一步突破,相同画质下可将文件大小减半,这对4K、8K等超高清视频的传输和存储尤为关键。5. **AC3(Dolby Digital)**:AC3是...

111,131

社区成员

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

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

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