来自索引的delphi CopyMemory

时间:2011-06-28 09:58:26

标签: delphi memory copy

我正在使用Delphi 7.你能不能告诉我是否有某个程序可以找到 其行为如下:CopyMemory但我可以从中复制内存 具体的字节数。

我需要具有以下签名的东西:

procedure CopyMemory(Destination: Pointer; Source: Pointer; Length: DWORD; fromByte: Integer);

我需要这个,因为我必须通过tcpip发送未发送的字节,这就是我必须提取存储在内存中的未发送字节的原因。

我查看了源代码,我需要重写一个asm部分。 我多年没有接触过asm,我宁愿留下可靠的东西......

谢谢!

4 个答案:

答案 0 :(得分:4)

你可以用这个:

procedure CopyMemory(Destination: Pointer; Source: Pointer; Length, fromByte: Integer);
begin
  move(PAnsiChar(Source)[frombyte],PAnsichar(Dest)[frombyte],Length-fromByte);
end;

不要重写动作部分。 依靠VCL版本。 如果需要,也可以使用FastCode version

答案 1 :(得分:3)

procedure CopyMemory(Src, Dest: Pointer; Len: Cardinal; Offset: Integer);
var
  OffsetSrc: ^Byte;
begin
  OffsetSrc := Src;
  inc(OffsetSrc, Offset);
  Move(OffsetSrc^, Dest^, Len);
end;

但我想我可能更喜欢在辅助函数之外进行指针运算。

答案 2 :(得分:1)

您仍然可以使用CopyMemory,只需使用第一个未发送字节的地址作为源指针。

答案 3 :(得分:0)

只需传递要复制的第一个字节的地址即可。确保调整长度。

<强>伪代码

var
  Dest   : TBytes;
  Source : TBytes;
...
SetLength (Dest, Length (Source) - FromByte);
CopyMemory (@Dest[0], @Source[FromByte], Length (Source) - FromByte);