Marshal.Copy 是不能从非托管指针的偏移位置复制数据的,要重新计算非托管指针的值
2011-11-28 17:11
225 查看
Marshal.Copy 是不能从非托管指针的偏移位置复制数据的,要重新计算非托管指针的值
///
/// 读数据
///
/// 数据
/// 起始地址
/// 个数
///
public int Read(ref byte[] bytData, int lngAddr, int lngSize)
{
if (lngAddr + lngSize > m_MemSize) return 2; //超出数据区
if (m_bInit)
{
int ptrValue = (int)m_pwData;//Marshal.Copy 是不能从非托管指针的偏移位置复制数据的,要重新计算非托管指针的值
//Marshal.Copy(m_pwData, bytData, lngAddr, lngSize);
Marshal.Copy((IntPtr)(ptrValue + lngAddr), bytData, 0, lngSize);
//第3个参数 startIndex 目标数组中复制起始位置的索引(从零开始)。//就是说 m_pwData 的起始复制点是无法改变的[除非改变 m_pwData 对应的 IntPtr 值]
}
else
{
return 1; //共享内存未初始化
}
return 0; //读成功
}
///
/// 读数据
///
/// 数据
/// 起始地址
/// 个数
///
public int Read(ref byte[] bytData, int lngAddr, int lngSize)
{
if (lngAddr + lngSize > m_MemSize) return 2; //超出数据区
if (m_bInit)
{
int ptrValue = (int)m_pwData;//Marshal.Copy 是不能从非托管指针的偏移位置复制数据的,要重新计算非托管指针的值
//Marshal.Copy(m_pwData, bytData, lngAddr, lngSize);
Marshal.Copy((IntPtr)(ptrValue + lngAddr), bytData, 0, lngSize);
//第3个参数 startIndex 目标数组中复制起始位置的索引(从零开始)。//就是说 m_pwData 的起始复制点是无法改变的[除非改变 m_pwData 对应的 IntPtr 值]
}
else
{
return 1; //共享内存未初始化
}
return 0; //读成功
}
相关文章推荐
- 指针类型的数据在初始化以前时不能用位置运算符寻找其位置
- linux ftell函数(用于得到文件位置指针当前位置相对于文件首的偏移字节数)计算文件的字节大小
- 编写程序读入一组string类型的数据,并将它们存储在vector中,再将vector对象复制给一个字符指针数组。
- 容器类仅能持有对象引用(指向对象的指针) 而不是将对象信息copy一份至数列某位置。
- 问题2:重新命名或者移动数据文件、日志文件到新的位置
- C# 表复制和数据行的复制说明(Clone、ImportRow 、Copy )
- Firefox中通过JavaScript复制数据到剪贴板(Copy to Clipboard 跨浏览器版)
- fseek文件偏移位置的返回值和指针位置关系
- 头指针链表插入数据方式之任意位置插入
- SqlBulkCopy 批量复制数据到数据库
- 2014年去哪儿网笔试题--一个10*10的矩阵(可以理解为棋盘),随时生成一组数据填入矩阵,任何一个位置的数字除4进行计算,按余数着色...
- 内存管理——数据存放位置和野指针
- 采用指针访问方式从键盘给数组a[N]输入数据,然后对元素值重新按逆序存放并输出
- sqlplus copy(复制大批量数据(long类型))
- SQL*Plus copy 命令处理大批量数据复制
- WM_COPYDATA传送指针数据类型的问题
- 函数 ftell 用于得到文件位置指针当前位置相对于文件首的偏移字节数
- SQL>下使用COPY命令复制或转移数据
- Marshal类支持从托管内存空间复制数据到非托管内存空间
- C# 使用 SqlBulkCopy 类批量复制数据到数据库