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相关推荐
- managed code和unmanaged code混合debug
首先: 1. managed code的项目属性中debug页里,"Enable unmanaged code debugging"选上. 2. unmanaged code项目属 ...
- 【转载记录】Accessing Device Drivers from C#
来源:http://www.drdobbs.com/cpp/accessing-device-drivers-from-c/184416423/ Device Drivers are written ...
- 走马观花:Visual Studio Code Name Orcas Mar07CTP /体验DLINQ
不知道什么叫"Orcas"?简单说应该就是下一版本的Visual Studio 吧. 现在atlas,LINQ,WF之类东西,对于VS2005是单独安装的,Orcas应该是全内置吧 ...
- 对象引用与托管指针(object references and managed pointers)
C/C++中的指针是一种非常灵活而强大的引用机制,但同时也非常脆弱,稍有不慎,就会出错. Java完全摈弃了指针的概念,而代之以对象引用(object reference),基本上消灭了由指针而导致的 ...
- What is Type in managed heap?
我们知道,在程序运行过程中,每个对象(object)都是对应了一块内存,这里的对象不仅仅指的是某个具体类型的实例(instance),也包括类型(type)本身.我想大家也很清楚CLR如何为我们创建一 ...
- Source Code Collection for Reproducible Research
Source Code Collection for Reproducible Research [ http://www.csee.wvu.edu/~xinl/source.html] " ...
- java native code_原生代码(native code)
原生代码(native code) Native code is the code whose memory is not "managed", as in, memory isn ...
- GP学习整理(一)—Geoprocessing assembly and Geoprocessor managed assembly
声明:仅做自己学习整理用,内容拷贝自ArcEngine SDK开发文档 Geoprocessing assembly overview In this topic About the Geoproce ...
- managed DLL 和 normal DLL
在做C#开发的过程中,必然会遇到很多DLL,也就是动态链接库文件,就像其他code一样,也分为managed code 和 unmanaged code. 其实跟普通的代码一个道理.那么我们先看看在w ...
最新文章
- install python+twisted+mysqldb+django on mac
- 基于深度学习的目标检测综述
- 图解WordPress主题(模板)架构
- 为什么 Java 中 2*(i*i) 比 2*i*i 更快?
- P3954 [NOIP2017 普及组] 成绩(python3实现)
- java jpanel 叠加_java – 如何在JPanel上叠加,调整大小和居中组件?
- 诺基亚贝尔回应“落选运营商5G采购”:尊重运营商决定
- Python基础===使用virtualenv创建一个新的运行环境
- python解包wxapkg_微信小程序wxapkg解包器c++版(免装py环境 绿色90k)
- 第08章节-Python3.5-Django工程创建 7
- mysql十三期_《叶问》第13期
- 非北京户口的驾照到期换证小攻略(仅供参考)
- iphone开蓝牙wifi上网慢_iPhone手机网速慢解决方法
- 中国移动车联网 V2X 平台白皮书
- Flyme patchrom项目笔记
- Crypto菜狗的学习日志之古典密码(一)
- toi,atol,strtod,strtol,strtoul实现类型转换
- VMwear虚拟机安装动态网卡和静态网卡(Basic Service版)
- idea提示未找到包,实际上包存在 问题解决
- Java技术交流群[微信](Talking Coding)
热门文章
- hdu4539 郑厂长系列故事——排兵布阵 + POJ1158 炮兵阵地
- 【数字信号处理】序列傅里叶变换 ( 狄义赫利条件 | 序列傅里叶变换定义 )
- 【Android 逆向】Android 进程注入工具开发 ( Visual Studio 开发 Android NDK 应用 | Visual Studio 中 SDK 和 NDK 安装位置 )
- 【Android 逆向】IDA 工具使用 ( 函数窗口 Function window | 创建引用图 Xrefs graph to | 创建调用图 Xrefs graph from )
- 【错误记录】Windows 系统 bat 脚本报错 ( 使用 pause 拦截窗口自动关闭 | 方便查看错误 )
- 【MATLAB】变量 ( 变量引入 | 变量类型 )
- 【计算机网络】网络层 : ICMP 协议 ( ICMP 差错报文 | 差错报文分类 | ICMP 询问报文 | ICMP 应用 | Ping | Traceroute )
- Dynamics CRM CE 怎样从 UCI 改为 classic UI
- 第十四章 架构师领导艺术(待续)
- guava入门学习2(新集合)