我正在使用Delphi 7.你能不能告诉我是否有某个程序可以找到 其行为如下:CopyMemory但我可以从中复制内存 具体的字节数。
我需要具有以下签名的东西:
procedure CopyMemory(Destination: Pointer; Source: Pointer; Length: DWORD; fromByte: Integer);
我需要这个,因为我必须通过tcpip发送未发送的字节,这就是我必须提取存储在内存中的未发送字节的原因。
我查看了源代码,我需要重写一个asm部分。 我多年没有接触过asm,我宁愿留下可靠的东西......
谢谢!
答案 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);