在ISAPI中如何释放所分配的内存流(55分)

  • 主题发起人 主题发起人 Tianhao
  • 开始时间 开始时间
T

Tianhao

Unregistered / Unconfirmed
GUEST, unregistred user!
这是一个动态输出JPEG至浏览器的函数,
问题在于运行停止于MemStr.Free,以后的代码根本不能执行.
如果在浏览器端按刷新按钮,则出现Internal Server err 500.
如注释掉,则没有刷新的问题了,但是不敢不释放.
我只有55分了,将全部奉上.我可提供全部源代码.
请与我联系.

procedure TWebModuleMain.SendJpegStream(chartimg:TImage;Response: TWebResponse);
var
jpegimg:TJpegImage;
MemStr:TMemoryStream;
begin
jpegimg:=TJpegImage.Create;
jpegimg.CompressionQuality:=50;
jpegimg.Assign(chartimg.Picture.Bitmap);
MemStr :=TMemoryStream.Create;
jpegimg.SaveToStream(MemStr);
MemStr.Position:=0;
Response.ContentType:='image/jpeg';
Response.ContentStream:=MemStr;
Response.SendResponse;
MemStr.Free; <---问题所在
jpegimg.Free;
end;
 
将下面这两句都删除, 系统应该可以给你释放ContentStream.
Response.SendResponse;
MemStr.Free;
 
如果删除Response.SendResponse的话,
则怎么输出到浏览器呢,我有点笨,请继续指教!
 
只要把memstr.free删除即可,
系统会自动负责删除memstr.
你看看 delphi自带的例子就清楚了
 
delphi自带的例子在哪?
电子工业出版社的<Delphi4 从入门到精通>上的例子是有
memstr.free的.
为什么系统会自动删除?
 
多人接受答案了。
 
在消息相应函数退出时VCL就会自动把数据发送出去的,
其发送的内容是Response->Content或Response->ContentStream.
如果有Response->ContentStream,就不理会Response->Content.

BTW:现在出的很多书的例子有很多画蛇添足的代码,多看无益.
建议你多看看INPRISE的HELP文件,虽然里面的叙述简单,但一般
都很切中要害.
 
后退
顶部