[StructLayout(LayoutKind.Sequential, Size = 280), Serializable]
public struct AESContext
{
/// int nr;
[MarshalAsAttribute(UnmanagedType.I4, SizeConst = 4)]
public int nr;
/// unsigned long *rk;
[MarshalAsAttribute(UnmanagedType.U4, SizeConst = 4)]
public uint rk;
// unsigned long buf[68];
[MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = 68)]
public uint[] buf;
}
这是我到目前为止的C#struct。每个字段上方的注释在C中键入。 如果有人可以验证,我很乐意。
答案 0 :(得分:6)
听起来您正在尝试获取成员内容中定义的C结构的C#结构。如果是这样,那么我相信你想要以下
[StructLayout(LayoutKind.Sequential), Serializable]
public struct AESContext
{
/// int nr;
public int nr;
/// unsigned long *rk;
public UIntPtr rk;
// unsigned long buf[68];
[MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = 68)]
public uint[] buf;
}
基本变化
SizeConst
。这样做并不常见StructLayout
MarshalAs
或IntPtr
来指示PInvoke指针类型。它们在32位和64位平台之间的大小变化很小