【发布时间】:2014-09-17 19:10:07
【问题描述】:
尝试编组此结构时出现异常
[StructLayout(LayoutKind.Explicit, Pack = 1)]
public struct Data
{
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 4, ArraySubType = UnmanagedType.U1)]
[FieldOffset(0x1)]
public byte[] a2;
}
它说 “无法从程序集 'WTF,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null' 加载类型 'WTF.Data',因为它包含偏移量 1 处的对象字段,该对象字段与非对象字段错误对齐或重叠。”
当我将偏移量 1 更改为 0 或 4 时,一切正常。 我做错了什么?
谢谢
【问题讨论】:
-
你为什么要把它放在 0x1?
-
这是一个例子。我需要读取一个字节数组未与 4 对齐的结构
-
与 C++ DLL 互操作,直接从硬件转发数据结构需要未对齐的数组,但在浏览 SO 时,很难相信大多数 C# 开发人员可能需要它。
标签: c# arrays marshalling memory-alignment