2011-03-10 165 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)]

希望它可以幫助解決由前綴陣列。

相關問題