用ISAPI开发显示动态图象程序的刷新问题--100大洋奉上(100分)

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

Tianhao

Unregistered / Unconfirmed
GUEST, unregistred user!
本人用ISAPI开发显示动态图象时,在浏览器端,按一下刷新按钮,
浏览器输出:
Internal Server Error 500
Exception: EExternalException
Message: External exception C000001D
再按一下,结果又正确,不知是什么原因。
不知是否与线程同步有关。望大虾们赐教。

所用方法是在WebItem的OnAction事件内生成一Timage图象,
然后再以Jpeg流的形式SendResponse.
本人试过,直接输出<HTML></HTML>的形式,没问题。
看来与图象有关。
 
本人试过,直接输出HTML的形式,没问题。
 
经调试,发觉是以下问题:
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;

如果不把MemStr释放掉,则没有以上问题. 但是不释放它,则是个危险的东东,
后果不敢想.

另外: 对于ISAPI的进程运行机制,是否在加载时DLL时只调用一次OnCreate事件,以后每次对于客户端的请求,始终不会再调用Create事件了吗?
如果这样,我把MemStr :=TMemoryStream.Create;放在OnCreate事件中,岂不是就成了吗.

 
注释掉:
Response.SendResponse;
MemStr.Free;
即可


 
接受答案了.
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
611
import
I
后退
顶部