【发布时间】:2013-02-25 16:36:46
【问题描述】:
如何在 C# 中用另一个结构的固定大小数组声明一个结构?我需要声明 this 以便它工作。或者如果我想要创建位图信息(-header),我的方法是否错误?
[StructLayout(LayoutKind.Sequential)]
public struct RGBQUAD
{
public byte b;
public byte g;
public byte r;
public byte reserved;
}
[StructLayout(LayoutKind.Sequential)]
public struct BITMAPINFO
{
public BITMAPINFOHEADER bmiHeader;
[MarshalAs(UnmanagedType.ByValArray, ArraySubType = UnmanagedType.LPStruct, SizeConst = 1)]
public RGBQUAD[] bmiColors;
}
编辑: 我自己学到的是,如果我分配 256 大小的 RGBQUAD 数组,UnmanagedType.ByValArray 和 SizeConst = 1 在这里很重要,以使 BITMAPINFO 编组大小始终保持在 44 字节事件。
编辑 2: 但 SizeConst 不能小于实际数组大小,否则非托管代码可能会使应用程序崩溃。
【问题讨论】:
-
你不能声明一个固定大小的结构,你只能声明一个结构在互操作期间是如何编组的。