引发类型为“System.ExecutionEngineException”的异常

17 篇文章 0 订阅

昨天调试函数时出现这个问题

引发类型为“System.ExecutionEngineException”的异常!

函数原型为:

      public struct CDMLASTDISPENSE
        {
            public byte last_cmd;       // Command last sent
            public byte last_error_cd;  //Error code last occurred
            public byte last_cbx;       //Cassette box last operated
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)]
            public byte[] last_dispense_count;   //Dispensed count
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)]
            public byte[] last_divert_count;     //Diverted count
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)]
            public byte[] last_pick_count;        //Pick count
        }
      
        [DllImport("FlCommCDM.dll", EntryPoint = "FlCommCDM_LastDispense", CharSet = CharSet.Ansi)]
        public static extern int FlCommCDM_LastDispense(ref CDMLASTDISPENSE lpResult);

调用该函数,起初调试都是成功的。结果突然电脑反应很慢,死住了,然后我强制结束程序,之后,再启动调试报该错。转成release

报错.runtime正在等待内部反应,

反正就是死活不行了。开始查是杀毒软件的错,然后卸了没用。又说是系统.net受到破坏。

为此查询了\ MSCOREE是托管程序的入口点

重新安装了.net2.0 使用 windows clean up 卸载重新安装了.net 2.0

还是不行。

最后仍是错误

点击后程序报错:
运行时遇到了错误。此错误的地址为 0x791c7b88,在线程 0x1194 上。错误代码为 0xc0000005。此错误可能是 CLR 中的 bug,或者是用户代码的不安全部分或不可验证部分中的 bug。此 bug 的常见来源包括用户对 COM-interop 或 PInvoke 的封送处理错误,这些错误可能会损坏堆栈
引发类型为“System.ExecutionEngineException”的异常

最后查出是byte[]的长度声明有问题,随改为:

    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 6)]
            public byte[] last_dispense_count;   //Dispensed count
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 6)]
            public byte[] last_divert_count;     //Diverted count
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 6)]
            public byte[] last_pick_count;        //Pick count

已经解决,是长度引起的。

但原来为什么没有出错,一直可以,是因为byte[]起初返回的值可以区分,当不能填满第一个byte时,后面的byte【】

就无法填装了。所以如果是最后一个byte【】数据长度不足也可以返回,但后面还跟有byte【】时,数据位就不对整了

因此,会引发无法预知的错误。


过程收获:.net2.0安装容易,卸载很难。重装需要安装微软帮助里使用window clean up 删除文件和注册表。



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值