我有這樣一個C++結構:互操作結構:如果無符號短映射到byte []?
typedef struct _FILE_OP_BLOCK
{
unsigned short fid; // objective file ID
unsigned short offset; // operating offset
unsigned char len; // buffer length(update)
// read length(read)
unsigned char buff[240];
} FILE_OP_BLOCK;
,現在我想給它的.Net映射。棘手的是,我應該通過一個2字節數組fid
和整數爲len
,即使在C#fid
是unsigned short
和len
是unsigned char
我不知道我的結構(C#)是否低於正確?
[StructLayout(LayoutKind.Sequential, Pack = 1, CharSet = CharSet.Auto)]
public struct File_OP_Block
{
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)]
public byte[] fid;
public ushort offset;
public byte length;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 240)]
public char[] buff;
}
爲什麼使用byte [2]而不是ushort/UInt16? – jweyrich 2010-04-09 07:23:41
@jweyrich,這是因爲某些原因,C++代碼將一個雙字節數組分配給'fid'。 – Graviton 2010-04-09 07:29:41