用 CopyMemoryVOID CopyMemory (
PVOID Destination, // address of copy destination
CONST VOID *Source, // address of block to copy
DWORD Length // size, in bytes, of block to copy
);
PVOID Destination, // address of copy destination
CONST VOID *Source, // address of block to copy
DWORD Length // size, in bytes, of block to copy
);
解决方案 »
- 用delphi如何实现 将数据发布到网页上?
- 求救,WebBrowser组件 能设置 http 的 referer 吗?
- 请问DELPHI内如何批量修改SpeedButton的Groupindex
- 关于ListBox双击后触发事件的问题
- 100分求助:编译出现错误:[Error] user_manager.pas(70): Undeclared identifier: 'vararrayof'
- 请问,在这种情况下该如何设置mscomm控件(急!!在线等待)
- 加密的问题该在哪儿问哦??
- 急需delphi6的XP风格的控件!!!
- 为什么不能更改打印机。
- Turbo C中有一个getch()函数可以让程序在任一键之后,继续运行!那么Pascal中有什么命令可以达到相同的功能呢?
- 紧急求救
- 怎樣可以將1,000,000 有formatfloat的形式轉成沒千位分隔等的形式,即1000000
procedure MoveMemory(Destination: Pointer; Source: Pointer; Length: DWORD);
{$EXTERNALSYM MoveMemory}
procedure CopyMemory(Destination: Pointer; Source: Pointer; Length: DWORD);
{$EXTERNALSYM CopyMemory}
如果源和目标有重叠区域,则必须用MoveMemory,否则用哪个都行.
TData=record
iVal:integer;
dblVal:double;
end;
var
a,b:TData;
begin
a.iVal := 25;
a.dblVal := 3.14;
Move(a,b,sizeof(TData));
ShowMessage(IntToStr(b.iVal) + ''#10#13'' + FloatToStr(b.dblVal));
end;
一切OK.
Source and Dest都是指向一个首地址,
如
var 首地址
P: Pointer; P^
P: PChar P^
//只要是指针类型就是 P^
S: string S[1];
Arr: array [0..10] of Char; Arr[0] or Arr
Arr: array [0..10] of TDataRecord Arr[0] or Arr
//只要是array 类型就是 Arr[0] or Arr
明白首地址后,就很容易明白C 的memcpy和Delphi的Move ,或API的MoveMemory/CopyMemory,就是内存的相互Copy,只要给出首地址就行了。当然在数组中首地址也可以不是0开头,有时我们对一个record or array进行赋值时,是一个个域进行赋值,如下:
type
TArrChar: array [0..3] of Char;procedure SetValue(Arr: TArrChar);
var
Chars: array of Char;
begin
SetLength(Chars, 4);
Chars[0] := Arr[0];
...
end;我们可以如此:
procedure SetValue(Arr: TArrChar);
var
Chars: array of Char;
begin
SetLength(Chars, 4);
Move(Arr, Chars, SizeOf(Char) * 4);
end;
record类型也可以这样,不过要注意对string/array类型进行静态分配空间; 如
S: string[255];
Arr: array [0..len] of TMyType
MAX_LEN = 10;type
TArrData = array [0..MAX_LEN] of TData;
TData = record
I: INteger;
S: string[255];
end;//将Data copy to arrData[Index]
procedure(var ArrData: TArrData; Data: TData; Index: Integer);
begin
Move(Data, ArrData[Index], SizeOf(TData));
end;procedure(var ArrData: TArrData; Data: TData; Index: Integer);
var
P: Pointer;
begin
P := @ArrData[Index];
Move(Data, P^, SizeOf(TData));
end;procedure(var ArrData: TArrData; Data: TData; Index: Integer);
var
S, D: Pointer;
begin
S := @Data;
D := @ArrData[Index];
Move(S^, D^, SizeOf(TData));
end;