加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 抛出System.ExecutionEngineException

发布时间:2020-12-15 21:16:32 所属栏目:百科 来源:网络整理
导读:执行此代码行时会抛出此异常 retobj = Marshal.PtrToStructure( buffer,anytype ); 我不知道是什么原因造成的,因为我试图运行的应用程序在其他开发者机器上工作正常. public static object RawDeserialize(byte[] rawdatas,Type anytype) { int rawsize = Ma
执行此代码行时会抛出此异常

retobj = Marshal.PtrToStructure( buffer,anytype );

我不知道是什么原因造成的,因为我试图运行的应用程序在其他开发者机器上工作正常.

public static object RawDeserialize(byte[] rawdatas,Type anytype) 
{
    int rawsize = Marshal.SizeOf(anytype);

    if (rawsize > rawdatas.Length)
    {  
        return null;
    }

    IntPtr buffer = Marshal.AllocHGlobal(rawsize);
    object retobj = null;

    try 
    {
         Marshal.Copy(rawdatas,buffer,rawsize);
         retobj = Marshal.PtrToStructure(buffer,anytype);
    }
    finally 
    {
         Marshal.FreeHGlobal(buffer);
    }

    return retobj;
}

我已经多次尝试修复.NET Compact Framework,似乎没有任何工作,有没有人知道这个解决方案?

解决方法

如果您将调试您的程序,您将发现以下行引发异常:

retobj = Marshal.PtrToStructure(buffer,anytype);

主要原因是编组工具不知道如何编组你的类型.这有很多可能的原因,我知道最常见的两个原因是:

>结构中的嵌套结构(类型为anytype)

>通过为结构添加前缀来解决

[StructLayout(LayoutKind.Sequential,Pack = 1)]

??

>嵌套数组.

>通过前缀数组解决

[MarshalAs(UnmanagedType.ByValArray,SizeConst = 512)]

??

希望能帮助到你.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读