我要疯了,为什么这样不行! ( 积分: 10 )

  • 主题发起人 主题发起人 宇宙神
  • 开始时间 开始时间

宇宙神

Unregistered / Unconfirmed
GUEST, unregistred user!
procedure TForm1.Button1Click(Sender: TObject);
var
mystream: TMemoryStream;
filename:string; //ini 文件路径
begin
mystream := TMemoryStream.Create;
mystream.LoadFromFile('D:/ledtest/test30/22.txt');
ClientSocket1.Socket.SendStream(mystream);
mystream.free;
end;

我单击 Button1 提示:
project project1.exe raised exception class Eaccessviolation with
message 'access violation at address 000000000 .read of address 00000000

各位大哥,这是什么原因啊?
我是错在哪里?
谢谢!

回答1:
把流指针定位到开始的位置,或者先倒入文件流再倒入内存流

回答2:
去掉 mystream.free;
SendStream后,mystream的拥有者变为Socket

回答3:
1、mystream.seek(0);首先应将内存流定位于0.
2、 ClientSocket1.Socket.SendStream(mystream);
mystream.free;
这两句有问题,你要等待ClientSocket1.Socket.SendStream发送完毕,才可以释放.


回答4:
TempStream.Position := 0;





两位大哥:
把流指针定位到开始的位置,或者先倒入文件流再倒入内存流
是什么意思?

去掉 mystream.free;
SendStream后,mystream的拥有者变为Socket
那什么时候释放呢?
我怎么知道发完了啊?
那我的程序要怎么改?
谢谢!
 
楼主的这段代码没有问题的
问题可能出在ClientSocket1上面: ClientSocket1可能没有初始化,或者被别的操作删除了...
 
你改为:
mystream := TMemoryStream.Create;
mystream.LoadFromFile('D:/ledtest/test30/22.txt');
mystream.Posision := 0; //加上这句代码试一下。
ClientSocket1.Socket.SendStream(mystream);
mystream.free;
 
多人接受答案了。
 

Similar threads

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