是不是fun(srcData:Pointer;srcLen:Longword;tagData:Pointer;tagLen:PLongword);?
我这样写,但在函数中
ms:=TMemoryStream.Create();
ms.Write(srcData,srcLen);
运行时write报错,错误信息看不懂,好像是内存错。src和tag两个缓冲区并没有特别意义,只是某一块内存。
调用:
buf1,buf2:array[0..100] of char;
len1,len2:Longword;
fun(@buf1[0],len1,@buf2[0],@len2);
我这样写,但在函数中
ms:=TMemoryStream.Create();
ms.Write(srcData,srcLen);
运行时write报错,错误信息看不懂,好像是内存错。src和tag两个缓冲区并没有特别意义,只是某一块内存。
调用:
buf1,buf2:array[0..100] of char;
len1,len2:Longword;
fun(@buf1[0],len1,@buf2[0],@len2);
不好意思刚睡醒-_-#
------------------------------------------
var
buf1,buf2:array[0..100] of char;
len1,len2:Longint;
begin ...
fun(buf1,len1,buf2,len2);end;
仔细试了一下,当len1(也就是srcLen)大于4608,即0x1200时报错,反之无错,为什么?ms是函数内的局部变量。
try
begin
ms:=TMemoryStream.Create();
ms.Write(srcData,srcLen);
ms.Position:=0;
end;
except
i:=GetLastError();
ShowMessage(IntToStr(i));
end;
结果ShowMessage显示0,到底是什么错误呀?
var
ms: TMemoryStream;
begin ms := TMemoryStream.Create;
ms.Write(srcData,srcLen);
ms.Free;end;procedure TForm1.FormCreate(Sender: TObject);
var
buf1,buf2:array[0..100000] of char;
len1,len2:Longint;
begin len1 := 100000;
fun(buf1,len1,buf2,len2);end;
以上代码可以正常运行,如果你buf开了100万,运行的时候出错在内存申请的时候,不在ms.write
但是,Buffer 是个实参,其实就是以指针的形式传参。表示:缓冲区起始地址为 Buffer 的起始地址。所以,应写为
ms.Write(srcData^, srcLen);
此代码有可能正常运行(不出访问异常),但是,数据对吗?不防修改一下 buf1 试试看。
ms.Write(srcData,srcLen)是错误的,可以这样写
ms.Write(srcData[0],srcLen)或者如你的代码ms.Write(srcData^,srcLen)
buf:array of char;
函数中再SetLength(buf,1000000);那么ms.Read(buf,ms.size);就会出错,这是怎么回事?
ms.Position := 0;
ms.Read(buf[0], ms.size);