日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

SizeOf与Structure与Managed Code

發(fā)布時間:2025/6/15 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SizeOf与Structure与Managed Code 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
中午剛剛提交給MS一個case,問題描述如下:
(這是一個開源的EXCEL的代碼,原來是用vb.net寫的,我用C#改寫了一遍。vb.net中使用的API:FilePut是沒有這個問題的,我自己寫的這個,就是不行。)

下面的Marshal.SizeOf(vt)這行代碼中,對于我下面給出的例子里面,我希望的size應(yīng)該是2+2+1,而不是內(nèi)存對齊后的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);

}

?

//調(diào)用的代碼:

l = aFormat[lIndex].Length;

cFORMAT_RECORD.opcode = 0x1e;

cFORMAT_RECORD.length = (short)(l+1);

cFORMAT_RECORD.FormatLength = (byte)(l);

FilePut(cFORMAT_RECORD);

?

// 結(jié)構(gòu)示例

[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給我回復(fù)后,我把結(jié)果post上來分享給大家。

總結(jié)

以上是生活随笔為你收集整理的SizeOf与Structure与Managed Code的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。