PtrToStructure() failing: "the structure must not be a value class
Posted on 2009-09-04 12:28 sunrack 阅读(1219) 评论(0) 编辑 收藏 举报
According to the doc of Marshal.PtrToStructure(IntPtr, Object)
http://msdn.microsoft.com/en-us/library/30ex8z62.aspx
, it throws the ArgumentException that you saw when structure layout is not
sequential or explicit or structure is a boxed value type.
In this case, the structure is declared as sequential, however, the
elements in the array (traceGuidReg[i]) are boxed on the managed heap
because of the array object, thus you got the error "the structure must not
be a value class."
You would need to use the overload Marshal.PtrToStructure Method (IntPtr,
Type)
http://msdn.microsoft.com/en-us/library/4ca6d5z7.aspx
and assign the result of PtrToStructure to the array elements.
public static object PtrToStructure(System.IntPtr ptr, System.Type structureType)
Member of System.Runtime.InteropServices.Marshal
http://msdn.microsoft.com/en-us/library/30ex8z62.aspx
, it throws the ArgumentException that you saw when structure layout is not
sequential or explicit or structure is a boxed value type.
In this case, the structure is declared as sequential, however, the
elements in the array (traceGuidReg[i]) are boxed on the managed heap
because of the array object, thus you got the error "the structure must not
be a value class."
You would need to use the overload Marshal.PtrToStructure Method (IntPtr,
Type)
http://msdn.microsoft.com/en-us/library/4ca6d5z7.aspx
and assign the result of PtrToStructure to the array elements.
public static object PtrToStructure(System.IntPtr ptr, System.Type structureType)
Member of System.Runtime.InteropServices.Marshal