【发布时间】:2017-02-06 22:35:23
【问题描述】:
我有以下嵌套结构。
[StructLayout(LayoutKind.Sequential, Pack = 1)]
struct ERROR_ITEM
{
byte ErrorID;
};
[StructLayout(LayoutKind.Sequential, Pack = 1)]
struct ERROR_DATA
{
[MarshalAs(UnmanagedType.ByValArray, ArraySubType = UnmanagedType.Struct, SizeConst = 10)]
ERROR_ITEM[] ErrorItem;
};
[StructLayout(LayoutKind.Sequential, Pack = 1)]
struct VCP_DATA
{
[MarshalAs(UnmanagedType.Struct)]
ERROR_DATA ErrorData;
};
我需要将一个字节数组复制到这个结构中,所以我尝试了以下
vcpBuffer = new VCP_DATA();
GCHandle handle = GCHandle.Alloc(vcpBuffer, GCHandleType.Pinned);
try
{
IntPtr pBuffer = handle.AddrOfPinnedObject();
Marshal.Copy(bytarray, 0, pBuffer, length);
}
finally
{
if (handle.IsAllocated)
handle.Free();
}
但是 GCHandle.Alloc() 返回错误“系统.Argument.Execption 类型的未处理异常”发生在 mscorlib.dll 中。 附加信息:对象包含非原始或非 blittable 数据。
【问题讨论】:
标签: c# nested structure marshalling