SizeOf与Structure与Managed Code
(這是一個開源的EXCEL的代碼,原來是用vb.net寫的,我用C#改寫了一遍。vb.net中使用的API:FilePut是沒有這個問題的,我自己寫的這個,就是不行。)
下面的Marshal.SizeOf(vt)這行代碼中,對于我下面給出的例子里面,我希望的size應該是2+2+1,而不是內存對齊后的6。我如何得到5這個值?<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
?
private void FilePut(System.ValueType vt){????????????
???????? int size = 0;
???????? size = Marshal.SizeOf(vt);
???????? IntPtr p = Marshal.AllocHGlobal(size);
???????? Marshal.StructureToPtr(vt,p,true);
???????? byte[] buf = new byte[size];
???????? Marshal.Copy(p,buf,0,size);
fs.Write(buf,0,buf.Length);
}
?
//調用的代碼:
l = aFormat[lIndex].Length;
cFORMAT_RECORD.opcode = 0x1e;
cFORMAT_RECORD.length = (short)(l+1);
cFORMAT_RECORD.FormatLength = (byte)(l);
FilePut(cFORMAT_RECORD);
?
// 結構示例
[StructLayoutAttribute(LayoutKind.Sequential, CharSet=CharSet.Auto)]
struct FORMAT_RECORD
{
???? public short opcode;// 0x1e
???? public short length;//1+len(format)
???? [MarshalAs(UnmanagedType.U1, SizeConst=1)]public byte FormatLength;//len(format)
}//followed by the Format-Picture
等MS給我回復后,我把結果post上來分享給大家。
總結
以上是生活随笔為你收集整理的SizeOf与Structure与Managed Code的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 超想做一个网络游戏!有兴趣的人进来讨论讨
- 下一篇: [感叹]流年