2011-03-10 164 views
4

当这行代码被执行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, 0, buffer, rawsize); 
     retobj = Marshal.PtrToStructure(buffer, anytype); 
    } 
    finally 
    { 
     Marshal.FreeHGlobal(buffer); 
    } 

    return retobj; 
} 

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

+0

提供有关异常(以及任何'InnerException')的更多信息。 – Jon 2011-03-10 14:10:05

+0

异常在InnerException中是否有更多信息? – 2011-03-10 14:10:27

+0

内部异常为空。 '公共静态对象RawDeserialize(字节[] rawdatas,anytype类型) \t \t { \t \t \t INT rawsize = Marshal.SizeOf(anytype类型); \t \t \t如果(rawsize> rawdatas.Length) \t \t \t \t返回NULL; \t \t \t IntPtr buffer = Marshal.AllocHGlobal(rawsize); \t \t \t \t \t \t object retobj = null; \t \t \t尝试 \t \t \t { \t \t \t \t元帅。复制(rawdatas,0,buffer,rawsize); \t \t \t \t retobj = Marshal.PtrToStructure(buffer,anytype); \t \t \t} \t \t \t最后 \t \t \t { \t \t \t \t Marshal.FreeHGlobal(缓冲液); \t \t \t} \t \t \t return retobj; \t \t}' 这是包含该行的功能。除此之外,我不能提供任何更多的信息。 – user501211 2011-03-10 14:35:25

回答

1

如果你调试你的程序,你会发现,下面的行抛出该异常:

retobj = Marshal.PtrToStructure(buffer, anytype); 

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

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

    • 解决与

      [StructLayout前缀你的结构(LayoutKind.Sequential,包= 1)]

  2. 嵌套数组。

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

希望它可以帮助解决由前缀阵列。

相关问题