中午刚刚提交给MS一个case,问题描述如下:
(这是一个开源的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相关推荐

  1. managed code和unmanaged code混合debug

    首先: 1. managed code的项目属性中debug页里,"Enable unmanaged code debugging"选上. 2. unmanaged code项目属 ...

  2. 【转载记录】Accessing Device Drivers from C#

    来源:http://www.drdobbs.com/cpp/accessing-device-drivers-from-c/184416423/ Device Drivers are written ...

  3. 走马观花:Visual Studio Code Name Orcas Mar07CTP /体验DLINQ

    不知道什么叫"Orcas"?简单说应该就是下一版本的Visual Studio 吧. 现在atlas,LINQ,WF之类东西,对于VS2005是单独安装的,Orcas应该是全内置吧 ...

  4. 对象引用与托管指针(object references and managed pointers)

    C/C++中的指针是一种非常灵活而强大的引用机制,但同时也非常脆弱,稍有不慎,就会出错. Java完全摈弃了指针的概念,而代之以对象引用(object reference),基本上消灭了由指针而导致的 ...

  5. What is Type in managed heap?

    我们知道,在程序运行过程中,每个对象(object)都是对应了一块内存,这里的对象不仅仅指的是某个具体类型的实例(instance),也包括类型(type)本身.我想大家也很清楚CLR如何为我们创建一 ...

  6. Source Code Collection for Reproducible Research

    Source Code Collection for Reproducible Research [ http://www.csee.wvu.edu/~xinl/source.html] " ...

  7. java native code_原生代码(native code)

    原生代码(native code) Native code is the code whose memory is not "managed", as in, memory isn ...

  8. GP学习整理(一)—Geoprocessing assembly and Geoprocessor managed assembly

    声明:仅做自己学习整理用,内容拷贝自ArcEngine SDK开发文档 Geoprocessing assembly overview In this topic About the Geoproce ...

  9. managed DLL 和 normal DLL

    在做C#开发的过程中,必然会遇到很多DLL,也就是动态链接库文件,就像其他code一样,也分为managed code 和 unmanaged code. 其实跟普通的代码一个道理.那么我们先看看在w ...

最新文章

  1. install python+twisted+mysqldb+django on mac
  2. 基于深度学习的目标检测综述
  3. 图解WordPress主题(模板)架构
  4. 为什么 Java 中 2*(i*i) 比 2*i*i 更快?
  5. P3954 [NOIP2017 普及组] 成绩(python3实现)
  6. java jpanel 叠加_java – 如何在JPanel上叠加,调整大小和居中组件?
  7. 诺基亚贝尔回应“落选运营商5G采购”:尊重运营商决定
  8. Python基础===使用virtualenv创建一个新的运行环境
  9. python解包wxapkg_微信小程序wxapkg解包器c++版(免装py环境 绿色90k)
  10. 第08章节-Python3.5-Django工程创建 7
  11. mysql十三期_《叶问》第13期
  12. 非北京户口的驾照到期换证小攻略(仅供参考)
  13. iphone开蓝牙wifi上网慢_iPhone手机网速慢解决方法
  14. 中国移动车联网 V2X 平台白皮书
  15. Flyme patchrom项目笔记
  16. Crypto菜狗的学习日志之古典密码(一)
  17. toi,atol,strtod,strtol,strtoul实现类型转换
  18. VMwear虚拟机安装动态网卡和静态网卡(Basic Service版)
  19. idea提示未找到包,实际上包存在 问题解决
  20. Java技术交流群[微信](Talking Coding)

热门文章

  1. hdu4539 郑厂长系列故事——排兵布阵 + POJ1158 炮兵阵地
  2. 【数字信号处理】序列傅里叶变换 ( 狄义赫利条件 | 序列傅里叶变换定义 )
  3. 【Android 逆向】Android 进程注入工具开发 ( Visual Studio 开发 Android NDK 应用 | Visual Studio 中 SDK 和 NDK 安装位置 )
  4. 【Android 逆向】IDA 工具使用 ( 函数窗口 Function window | 创建引用图 Xrefs graph to | 创建调用图 Xrefs graph from )
  5. 【错误记录】Windows 系统 bat 脚本报错 ( 使用 pause 拦截窗口自动关闭 | 方便查看错误 )
  6. 【MATLAB】变量 ( 变量引入 | 变量类型 )
  7. 【计算机网络】网络层 : ICMP 协议 ( ICMP 差错报文 | 差错报文分类 | ICMP 询问报文 | ICMP 应用 | Ping | Traceroute )
  8. Dynamics CRM CE 怎样从 UCI 改为 classic UI
  9. 第十四章 架构师领导艺术(待续)
  10. guava入门学习2(新集合)