您的位置:首页 > 其它

在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的位置开始读取, 也可以自定义偏移量.

如果我们知道了要传送的数据的长度, 那么可以用一个循环来完成整个数据块的传送.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: