微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c# – 抛出System.ExecutionEngineException

执行此代码行时会抛出此异常

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)]

  

希望能帮助到你.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐