关于MOVE 和 CopyMemory 的用法区别
最近做了一个数据采集服务器, 根据程序的框架,使用了大量的指针结构体(内存块) 操作。
例子:
PArrayByte = ^TArrayByte;
TArrayByte = packed record
ABinding: Pointer;
data: TBytes;
len: integer;
IP: string[15];
Port: UINT;
end;
//数据解析函数
function GetGuiyue(ABuffer: PArrayByte): Boolean; stdcall; external 'Guiyue.dll';
//数据采集函数:
function GetCommand(ABuffer: PArrayByte): Boolean;
var
P: PArrayByte;
begin
try
new(P);
//指针传递
Move(ABuffer,P, Sizeof(ABuffer)); //可以将数据复制到P, ABuffer 和 P 指向同一个内存区 , ABuffer = $29580D0 ,ip= '192.168.1.132',P = $29580D0
CopyMemory(P,ABuffer, Sizeof(ABuffer)); //可以将数据复制到P, ABuffer 和 P 指向同一个内存区 , ABuffer = $29580D0 ,ip= '192.16'######,P = $29580D0 数据复制不全,数据块长度不够
执行出错,应该是 CopyMemory(@P,@ABuffer, Sizeof(ABuffer));
//复制内存块
Move(ABuffer,P, Sizeof(TArrayByte); //可以将数据复制到P, ABuffer 和 P 指向不同的内存区 , ABuffer = $5FFFFFF, ip= Inaccessible value, P = $29580D0
执行出错,应该是:Move(ABuffer^,P^, Sizeof(TArrayByte);
CopyMemory(P,ABuffer, Sizeof(TArrayByte)); //可以将数据复制到P, ABuffer 和 P 指向不同的内存区 , ABuffer = $29580D0 ,ip= '192.168.1.132',P = $24680D0
PArrayByte(P)^.ip := '113.140.88.*'; //数据处理
GetGuiyue(P); //数据解析
所以使用指针传递 复制数据 要在数据处理函数进行指针释放 Dispose(P);
finally
Dispose(P); //使用内存块复制数据,释放数据源指针 $24680D0
end;
end;
//数据解析
function GetGuiyue(ABuffer: PArrayByte): Boolean; stdcall;
var
myBuffer: TBytes;
begin
try
CopyMemory(@myBuffer[0],@ABuffer^.data[0], ABuffer^.len)
.............//数据处理
except
end;
end;
http://www.cnblogs.com/wxy8/archive/2011/06/22/2086703.html
关于MOVE 和 CopyMemory 的用法区别的更多相关文章
- Delphi中那些容易混淆的基础(@、^、Addr、Pointer,Move、CopyMemory,GetMem和FreeMem、GetMemory和FreeMemory、New和Dispose、StrAlloc和StrDispose、AllocMem)
@.^.Addr.Pointer Delphi(Pascal)中有几个特殊的符号,如@.^等,弄清楚这些符号的运行,首先要明白Delphi指针的一些基础知识:指针,是一个无符号整数(unsigned ...
- order_by_、group_by_、having的用法区别
写于 2012-11-20 22:14 doc文档上. Having 这个是用在聚合函数的用法.当我们在用聚合函数的时候,一般都要用到GROUP BY 先进行分组,然后再进行聚合函数的运算.运算完后 ...
- html中的alt和title用法区别
html中的alt和title用法区别 首先明确一下概念,alt是html标签的属性,而title既是html标签,又是html属性.title标签这个不用多说,网页的标题就是写在<title& ...
- 转 SQL Union和SQL Union All两者用法区别效率以及与order by 和 group by配合问题
SQL Union和SQL Union All两者用法区别效率以及与order by 和 group by配合问题 SQL Union和SQL Union All用法 SQL UNION 操作符 UN ...
- OC .(点)与->(箭头)用法区别
这两天同学总是问OC里.和->的用法区别,当时回答的不是很好,周末查了一下,大概清楚了,在这里记录一笔. 先看这个例程 #import <Foundation/Foundation.h&g ...
- php中strstr、strrchr、substr、stristr四个函数用法区别
php中strstr.strrchr.substr.stristr四个函数用法区别: php中strstr strrchr substr stristr这四个字符串操作函数特别让人容易混淆,常用的是s ...
- mysql SELECT FOUND_ROWS()与COUNT(*)用法区别
在mysql中 FOUND_ROWS()与COUNT(*)都可以统计记录,如果都一样为什么会有两个这样的函数呢,下面我来介绍SELECT FOUND_ROWS()与COUNT(*)用法区别 SEL ...
- php中print_r、var_dump和var_export几个函数的用法区别
php中print_r.var_dump和var_export几个函数的用法区别
- Oracle中 (+)与left join 的用法区别
Oracle中 (+)与left join 的用法区别 原创 2017年01月11日 13:33:42 6648 select * from a,b where a.id=b.id(+); (+)写在 ...
随机推荐
- 【Codeforces Round #301 (Div. 2) E】Infinite Inversions
[链接] 我是链接,点我呀:) [题意] 给你一个无限长的序列1,2,3,4... 然后给你n个操作. 每个操作ai,bi; 表示调换位置为ai和位置为bi的数的位置. (ai,bi<=10^9 ...
- SpringMVC响应Ajax请求(@Responsebody注解返回页面)
项目需求描述:page1中的ajax请求Controller,Controller负责将service返回的数据填充到page2中,并将page2整个页面返回到page1中ajax的回调函数. 一句话 ...
- BZOJ 3038 上帝造题的七分钟2 树状数组+并查集
题目大意:一个序列,有两种操作.1.将一段数中的每个数开根号.2.查询一段数的和. 思路:和3211是一个题,有兴趣的能够看看我的那篇博客. CODE: #include <cmath> ...
- SoC的Testbench中的简易bus_monitor(加入print函数)
SoC的Testbench中的简易bus_monitor(加入print函数) 主要思路 向固定地址写信息 使用工具链将C写的print/printf函数编译成hex文件 在testbench中创建b ...
- IOS手势事件
一, iPhone中处理触摸事件的操作,在3.2之前是主要使用的是由UIResponder而来的如下4种方式 - (void)touchesBegan:(NSSet *)touches withEve ...
- IOS使用AsyncSocket进行Socket通信
首先导入CFNetwork.framework框架 1.下载ASyncSocket库源码 2.把ASyncSocket库源码加入项目 3.在项目增加CFNetwork框架 使用AsyncSocket开 ...
- kafka集群操作指南
目录 kafka集群操作指南 (一)单机版安装 (二)集群安装 (三)集群启停操作 (四)topic相关的操作 (五)某个broker挂掉,本机器可重启 (六)某个broker挂掉且无法重启,需要其它 ...
- php课程 8-29 gd库能够画哪些东西
php课程 8-29 gd库能够画哪些东西 一.总结 一句话总结:文字,点,线,圆,弧线,矩形,各种形状都是可以的,和html5中的canva能画的东西很像,使用也很像,参数怎么记呢,参数完全不用记, ...
- 数据类型总结——Number(数值类型)
相关文章 简书原文:https://www.jianshu.com/p/9fb573ef10da 数据类型总结——概述:https://www.cnblogs.com/shcrk/p/9266015. ...
- Instruments性能优化-Core Animation
简书地址:http://www.jianshu.com/users/6cb2622d5eac/latest_articles 当App发展到一定的规模.性能优化就成为不可缺少的一点.可是非常多人,又对 ...