C# PtrToStructure引发的参数异常

C# PtrToStructure引发的参数异常,c#,.net,marshalling,hid,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 db

谁能解释一下以下参数异常:请告诉我结构不能是值类。 这是由我程序中的以下代码行引起的:

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;
}

谢谢

很抱歉没有给出代码示例,但这里有一个可能对您有所帮助的示例

以下是上述链接中的关键文本:

这个问题与环境无关 RegisterTraceGuidsAPI

根据 Marshal.ptr结构(IntPtr,对象) ,它抛出ArgumentException 当结构布局不可用时,您会看到 顺序的、明确的或结构是 装箱的值类型

在这种情况下,结构是 但是,声明为顺序的 数组中的元素 (traceGuidReg[i])被装箱在 由于阵列的原因而管理堆 对象,因此您得到了错误“the 结构不能是值类。“

您需要使用重载 Marshal.ptr结构方法(IntPtr, (类型) 并指定 PTRTO将结构添加到阵列元素


不能使用值类型(即
struct
)调用此特定重载


如果你打电话,你可以收到一个你类型的实例。

谢谢Jas,在你回复之前,我找到了解决方案,该站点也找到了,但是你能解释一下在托管堆上装箱的元素是什么意思吗?我想我很清楚这意味着什么,但我想澄清一下。例如:
dbh=(Device_Broadcast_Header)Marshal.PtrToStructure(m.LParam,typeof(Device_Broadcast_Header))只写代码的答案不受鼓励,因为它们不会为未来的读者提供太多信息。请对您所写的内容提供一些解释
[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);