PtrToStructure抛出的参数异常

时间:2009-07-28 17:56:56

标签: c# .net marshalling hid

有人可以解释下面的参数例外:结构不能是价值类。 它是由我的程序中的以下代码行引起的:

Marshal.PtrToStructure(m.LParam, dbh);

鉴于dbh的类型为:

[StructLayout(LayoutKind.Sequential)]
public struct Device_Broadcast_Header
{
    public int dbch_size;
    public int dbch_devicetype;
    public int dbch_reserved;
}

由于

3 个答案:

答案 0 :(得分:6)

您无法使用值类型(即struct)调用此特定Marshal.PtrToStructure重载。

如果您致电this overload,您可以收到您的类型实例。

答案 1 :(得分:2)

很抱歉没有提供代码示例,但这里有link可能对您有帮助。

以下是上述链接的主要文字:

  

问题与此无关   RegisterTraceGuids API。

     

根据医生的说法   Marshal.PtrToStructure(IntPtr,Object)   http://msdn.microsoft.com/en-us/library/30ex8z62.aspx   ,它会抛出ArgumentException   你看到的结构布局不是   顺序或显式或结构是   盒装值类型。

     

在这种情况下,结构是   然而,声明为顺序   数组中的元素   (traceGuidReg [i])装在盒子上   托管堆由于数组   对象,因此你得到错误“   结构不能是价值类。“

     

您需要使用重载   Marshal.PtrToStructure Method(IntPtr,   类型)   http://msdn.microsoft.com/en-us/library/4ca6d5z7.aspx   并分配结果   PtrToStructure到数组元素。

答案 2 :(得分:0)

[StructLayout(LayoutKind.Sequential)]
public class Device_Broadcast_Header_Wrapper{
    public Device_Broadcast_Header Header
}

Device_Broadcast_Header_Wrapper wapper = new Device_Broadcast_Header_Wrapper();
Marshal.PtrToStructure(m.LParam, wapper);