在windows mobile 下实现数据从非托管区复制到托管区的方法
2009-02-09 14:30
302 查看
在windows mobile 下实现数据从非托管区复制到托管区的方法:
1.使用Marshal.PtrToStructure(lpData, DestStruc);
这种方式,首先需要了解非托管区的目标指针所指向的数据块的大小及其结构,而且DestStruc的类型是结构或class, 至于是否能用数组, 我还没有试.
2. byte[] SimRetData = new byte[length];
Marshal.Copy(lpData, SimRetData, 0, (int)length);
这种方式,比较方便,只需要知道非托管区的目标指针所指向的数据块的总长度, 这个长度值往往可以从之前的回调函数里得到.
然后, 告诉Marshal.Copy()数据块的起始地址:lpData, 托管区的数组和需要拷贝的数据长度即可.
另外,Marshal.Copy()函数有14个重载, 可以满足各种类型数据的传输需要.
3. // Read byte from unmanaged memory.
byte c = Marshal.ReadByte(hGlobal);
这种方式最直接, 直接从非托管区的目标指针处读取一个字节.
Marshal.ReadByte()函数有2个重载, 支持从默认偏移为0的位置开始读取, 也可以自定义偏移量.
如果我们知道了要传送的数据的长度, 那么可以用一个循环来完成整个数据块的传送.
1.使用Marshal.PtrToStructure(lpData, DestStruc);
这种方式,首先需要了解非托管区的目标指针所指向的数据块的大小及其结构,而且DestStruc的类型是结构或class, 至于是否能用数组, 我还没有试.
2. byte[] SimRetData = new byte[length];
Marshal.Copy(lpData, SimRetData, 0, (int)length);
这种方式,比较方便,只需要知道非托管区的目标指针所指向的数据块的总长度, 这个长度值往往可以从之前的回调函数里得到.
然后, 告诉Marshal.Copy()数据块的起始地址:lpData, 托管区的数组和需要拷贝的数据长度即可.
另外,Marshal.Copy()函数有14个重载, 可以满足各种类型数据的传输需要.
3. // Read byte from unmanaged memory.
byte c = Marshal.ReadByte(hGlobal);
这种方式最直接, 直接从非托管区的目标指针处读取一个字节.
Marshal.ReadByte()函数有2个重载, 支持从默认偏移为0的位置开始读取, 也可以自定义偏移量.
如果我们知道了要传送的数据的长度, 那么可以用一个循环来完成整个数据块的传送.
相关文章推荐
- VB.NET用Marshal.PtrToStructure 方法实现数据在数组和结构间复制
- sql复制表结构和数据的实现方法
- sql复制表结构和数据的实现方法
- 写一个方法clone; 实现js五种数据类型(string, number, boolean, array, object)的复制
- 大津阈值OSTU函数实现方法对比, Mat转换为IplImage 类型,并复制数据
- C#实现把dgv里的数据完整的复制到一张内存表的方法
- mysql 复制一个表中数据到另一个表实现方法
- 数据结构课程设计-用栈实现表达式求值的方法详解
- ArcSDE复制数据时出现ORA-00955名称已由现有对象使用错误的解决方法
- ASP.NET中用javascript实现页面间传递数据的方法
- C#实现Winform窗口间数据交互的三种方法介绍
- jQuery插件zTree实现获取一级节点数据的方法
- php获取post中的json数据的实现方法
- MYSQL数据库主从复制的简单原理及实现方法
- php根据数据id自动生成编号的实现方法
- PHP基于迭代实现文件夹复制、删除、查看大小等操作的方法
- jQuery简单实现提交数据出现loading进度条的方法
- hibernate实现数据实体复制保存
- Android实现Activities之间进行数据传递的方法