关于“尝试读取或写入受保护的内存。这通常指示其他内存已损坏。”的解决

    给公司开发一个应用于分公司的小程序,结果出现了“尝试读取或写入受保护的内存。这通常指示其他内存已损坏。” 错误提示,极其郁闷。

    问题现象:VS2005环境,VB.NET语言,开发环境下运行程序没有任何问题,但是编译打包制作成安装程序后,去别的电脑上安装上,就会出现这个错误。

    网上搜索很久也没找到什么好的方法,只好自己分析。在出错的地方将所有的try语句去掉,然后打包放到其他电脑上安装运行,得到详细的错误代码

************** 异常文本 **************
System.AccessViolationException: 尝试读取或写入受保护的内存。这通常指示其他内存已损坏。
   在 OfficeControlLIB.IOfficeControl.set_Menubar(Boolean pbool)
   在 AxOfficeControlLIB.AxOfficeControl.set_Menubar(Boolean value)
   在 分公司文件浏览器.contentWindows.contentWindows_Load(Object sender, EventArgs e)
   在 System.Windows.Forms.Form.OnLoad(EventArgs e)
   在 System.Windows.Forms.Form.SetVisibleCore(Boolean value)
   在 System.Windows.Forms.Control.Show()
   在 分公司文件浏览器.viewWindows.ListView1_DoubleClick(Object sender, EventArgs e)
   在 System.Windows.Forms.Control.OnDoubleClick(EventArgs e)
   在 System.Windows.Forms.ListView.WndProc(Message& m)
   在 System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
   在 System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
   在 System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

    在此说明一下,我们公司购买的NTKO千航网络的文档控件,代码中的那个AxOfficeControl就是这个控件。程序中在窗体viewWindows上的listview1控件上双击鼠标,则根据双击的内容,打开新的窗体contentWindows,并用AxOfficeControl控件显示相关文档,并对文档的相关权限作出限制(例如不允许复制,不允许打印,不允许粘贴,不允许保存和另存等,这都是这个文档控件的功能)。

    自己胡乱尝试了N多方法,都无效。没办法,只好老老实实看错误提示信息,发现开头的两行里跟我的程序代码有关系,即这两行语句
   在 OfficeControlLIB.IOfficeControl.set_Menubar(Boolean pbool)
   在 AxOfficeControlLIB.AxOfficeControl.set_Menubar(Boolean value)
        这两行错误信息中都提到了Set_Menubar,Boolean,而我的程序中contentWindows窗体上的AxOfficeControl控件正是对office文档的菜单栏作了限制,代码如下:AxOfficeControl1.Menubar = False,也就是说设置了Office窗体的菜单栏隐藏不显示。

    于是把这句话注释掉,然后重新编译打包,去别的电脑上安装运行,果然问题解决。还好菜单栏是否隐藏对程序的功能并无太大影响,只要限制不能复制粘贴保存打印就好了。但是为什么将菜单栏隐藏就会出错呢?

    不死心,打开开发环境,运行程序,看了一下菜单栏,结果发现该控件的菜单栏的最右边,印着版权的授权信息。估计就是这个问题了。买了人家正版的软件,可能应该不能随便取消掉授权信的的说,不然你一隐藏,随便开发个什么程序都可以拿给任何客户用了。关于这个问题,已经发邮件给控件公司,不知道会有什么样的答复。

    总结:这种解决方法可能只适用于加载dll或ocx控件时遇到此类错误信息的问题。对于那些新建项目就提示错误的问题可能不适用,但不管怎样,多分析详细的错误信息准没错。肯定是哪里设置错了,更改了某些不能更改的设置(例如受保护的授权信息)造成的。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值