这段程序错在那里???高分
Bmp=new Graphics::TBitmap();
if(GetScreen(Bmp,false)) //抓屏
{ myjp=new TJPEGImage();
Stream=new TMemoryStream();
myjp->Assign(Bmp);
myjp->SaveToStream(Stream);
temp=IntToStr(Stream->Size);
Socket->SendText(temp);
Stream->Position=0;
Socket->SendStream(Stream);
delete myjp;
delete Stream;
}
delete Bmp;
这段图形传送跟踪执行完毕后出现“……Invalid Pointer opertion……”的错误提示,请教高手,这段程序错在那里???高分。
问题点数:50、回复次数:6Top
1 楼invalid(空心菜(Python是个好东东,大家多用用!))回复于 2002-03-08 22:51:52 得分 0
没看出来指针错误,学习。Top
2 楼invalid(空心菜(Python是个好东东,大家多用用!))回复于 2002-03-08 23:00:54 得分 30
看看我的抓屏发送代码比较一下吧。
//---------------------------------------------------------------------------
void __fastcall TMainForm::SSocketClientRead(TObject *Sender,
TCustomWinSocket *Socket)
{
AnsiString s,s1;
Graphics::TBitmap * mybmp;
// TJPEGImage *jp = new TJPEGImage();
TJPEGImage * myjpg;
s=Socket->ReceiveText();
if(s=="cap")
{
try{
MyStream=new TMemoryStream();
mybmp=new Graphics::TBitmap();
myjpg=new TJPEGImage();
GetScreen(mybmp,false);
myjpg->Assign(mybmp);
myjpg->CompressionQuality=QualityEdit->Text.ToIntDef(10);
myjpg->SaveToStream(MyStream);
myjpg->SaveToFile("c:\\123.jpg");
}
__finally
{
delete myjpg;
delete mybmp;
}
MyStream->Position=0;
s1=IntToStr(MyStream->Size);
Socket->SendText(s1);
}
if(s=="ready")
{
MyStream->Position=0;
Socket->SendStream(MyStream);
}
}
Top
3 楼invalid(空心菜(Python是个好东东,大家多用用!))回复于 2002-03-08 23:03:25 得分 0
忘记删除MyStream;
加在:
__finally
{
delete myjpg;
delete mybmp;
delete MyStream;
}
中吧。Top
4 楼knfy(苏格拉顶)回复于 2002-03-09 02:25:56 得分 20
是不是因为SendStream开启另外一个线程发送这个Stream的内容,而你删除了这个Stream的时候实际上还没有发送完,所以出现指针错误。(就是非法操作)Top
5 楼limaoxue(易往)回复于 2002-03-09 08:47:17 得分 0
invalid(空心菜) 这段程序我看过。你能解释一下myjpg的CompressionQuality属性吗?还有ToIntDef(10)的结果是什么?
Top
6 楼invalid(空心菜(Python是个好东东,大家多用用!))回复于 2002-03-09 08:58:59 得分 0
我上面的删除MyStream的代码是错误的。
我原来的程序没有删除,应该是有问题的。但是运行没有非法。我在调试一下再说吧。
ToIntDef(10);应该是AnsiString的方法。表示如果不能转换为数据,就等于10。例如:Edit的内容是abcd。它不能转换为整数,如果用ToInt就会有异常。如果用ToIntDef(10);就没有。它会用默认值10返回。
myjpg的CompressionQuality属性表示压缩的精度,压缩成jpg属于有损压缩。具体看看help吧。Top




