我有一个场景,我需要对具有可变大小字节数组的结构进行Marshal。
我已经将这个问题作为我的向导,但我仍然对这个问题存在疑问。
Marshalling dynamic size array into struct
c ++代码
// frame headers
typedef struct _VENUS_HEADER
{
BOOLEAN Relative; // TRUE = relative timing (use Milliseconds)
// FALSE = absolute timing (use Tics)
VENUS_SEQUENCE Sequence; //sequence number
VENUS_TIMESTAMP Time; // relative time to display in Milliseconds
} VENUS_HEADER, *PVENUS_HEADER;
// WriteFile format
typedef struct _VENUS_IMAGE
{
VENUS_HEADER Header; // sequence & time
UCHAR Frame[1]; // frame data
} VENUS_IMAGE, *PVENUS_IMAGE;
C#代码
[StructLayout(LayoutKind.Sequential)]
public struct VENUS_TIMESTAMP
{
public long Tics;
}
[StructLayout(LayoutKind.Sequential)]
public struct VENUS_HEADER
{
[MarshalAs(UnmanagedType.Bool)]
public bool Relative; // TRUE = relative timing (use Milliseconds)
// FALSE = absolute timing (use Tics)
public uint Sequence; //sequence number
public VENUS_TIMESTAMP Time; // relative time to display in Milliseconds
}
// WriteFile format
[StructLayout(LayoutKind.Sequential)]
public struct VENUS_IMAGE
{
//public int MyProperty { get; set; }
public VENUS_HEADER Header; // sequence & time
public IntPtr Frame; // frame data
}
byte[] bulbData = bulb.Bitmap2Bulb(img);
venusImage.Frame = Marshal.AllocHGlobal(bulbData.Length); Marshal.Copy(bulbData, 0, venusImage.Frame, bulbData.Length);
int size = Marshal.SizeOf(venusImage);
我的大小报告为24,无论IntPtr的值或byte []大小。我相信结构的最终大小应该是921616.任何肝脏都会受到赞赏。