抛出System.ExecutionEngineException

时间:2011-03-10 14:05:31

标签: c# .net .net-3.5

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

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, 0, buffer, rawsize);
         retobj = Marshal.PtrToStructure(buffer, anytype);
    }
    finally 
    {
         Marshal.FreeHGlobal(buffer);
    }

    return retobj;
}

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

1 个答案:

答案 0 :(得分:1)

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

 retobj = Marshal.PtrToStructure(buffer, anytype); 

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

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

    • 通过在

      前面添加结构来解决
        

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

    •   

  2. 嵌套数组。

    • 通过在

      前面添加数组来解决
        

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

    •   

  3. 希望它有所帮助。