Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.12.04;
Скачать: CL | DM;

Вниз

Fs.free   Найти похожие ветки 

 
MRAk   (2005-11-15 23:08) [0]

if s="down:"+ExtractFileName(putfail) then
   begin
       socket.Close;
   Application.MessageBox(Pchar("файл "+putfail+" Успешно отправлен"), "Внимание!!!");
   fs.Free;
   end;
Вот кусок кода... это окончание приема файла(не надо переносить в сети... вопрос не по ним=) ) так вот при попытке освободить fs постоянно появляется ошибка... почему?


 
Джо ©   (2005-11-15 23:13) [1]

А где создается и используется сей fs? А то тут видно только уничтожение объекта и куча вообще постороннего кода.


 
MRAk   (2005-11-15 23:25) [2]

procedure TForm6.ClientSocket1Read(Sender: TObject;
 Socket: TCustomWinSocket);
 var
 s:string;
begin
s:=Socket.ReceiveText;
if s="!.Readyfordata" then
Socket.SendText("#$!Data"+ExtractFileName(putfail) + #0 +inttostr(fs.Size) + #0 + edit2.Text + #0)
else
if s="OTKAZ" then
begin
Showmessage("В приеме файла было отказано");
hide;
end
else
if s="OJIDAYU" then
begin
  unit2.Form2.Label2.Caption:=ExtractFileName(putfail);
  unit2.Form2.show;
  form3.Enabled:=false;
  form6.Enabled:=false;
   fs.Position:= 0;
   obsh:=0;
   Socket.SendText("#$!file"+IntToStr(fs.Size) + #0 +ExtractFileName(putfail)+ #0);
   Socket.SendStream(fs);
   end
   else
   if s="down:"+ExtractFileName(putfail) then
   begin
       socket.Close;
   Application.MessageBox(Pchar("файл "+putfail+" Успешно отправлен"), "Внимание!!!");
   try
   fs.Free;
   except
   end;
   unit2.Form2.Label3.caption:="";
  unit2.Form2.Hide;
  form3.Enabled:=True;
  form6.Enabled:=True;
  form6.Hide;
   end
   else
   if s ="SBROS" then
   begin
   clientsocket1.Active:=false;
        Application.MessageBox(Pchar("Соеденение прерванно"), "Внимание!!!");
  unit2.Form2.Hide;
  try
   fs.Free;
   except
   end;
  form3.Enabled:=True;
  form6.Enabled:=True;
  form6.Hide;
   end;
end;
Вот весь код отправки


 
MRAk   (2005-11-15 23:26) [3]

да сюда стоит добавить:

function TMyFileStream.Read(var Buffer; Count: Longint):Longint;
begin
Result := inherited Read(Buffer, Count);
obsh:=obsh+result;
unit2.Form2.Gauge1.Progress:=round((Obsh/Size)*100);
if round((Obsh/Size)*100)=100 then
unit2.Form2.Label3.caption:="Файл успешно отправлен... ожидаем конца приема";
end;


 
MRAk   (2005-11-15 23:44) [4]

хм да тока там без try except и fs типа TMyFileStream


 
Джо ©   (2005-11-15 23:50) [5]

Где СОЗДАЕТСЯ объект? К чему эта вся совершенно посторонняя куча кода? Ты сюда все свои исходники запостить хочешь? \;>
И,ты так и не сказал, что за "ошибка" была.


 
Плохиш ©   (2005-11-16 00:52) [6]


>   unit2.Form2.Label2.Caption:=ExtractFileName(putfail);

Можно дальше не читать.


 
MRAk   (2005-11-16 01:44) [7]

блин кажется я попросил помоши и если я не такой СУПЕР МЕГА КРУТОЙ ПРОГРАММеР как ты то извени.


Project test.exe raised exception class EPrivelege whith message "Privileged Instructions". Process stopped use...

это если через делфю пускать а так такая ошибка:

Access violation at address 00000000. Read of address 00000000

Вот создание:

fs.free;
 fs := TMyFileStream.Create(Putfail,fmOpenRead);
 try
   fs.Position:= 0;
   except
   end;


 
MRAk   (2005-11-16 01:48) [8]

хм... возможно часть причины была в том что я в private посадил присвоение типа.. но если не в привате то в делфи такая ошибка:

Project test.exe raised exception class EAccsessVioaltion whith message "Access violation at address 00000000. Read of address 00000000". Process stopped use...


 
Джо ©   (2005-11-16 01:57) [9]


>  [7] MRAk   (16.11.05 01:44)
> блин кажется я попросил помоши

После этого решай свои проблемы сам. Хотя, в принципе, с учетом кода, приведенного в [7] и некоторых моментов в [2] твоя ошибка уже достаточно очевидна. Но не думаю, что ее решение кому-нибудь будет интересно.


 
MRAk   (2005-11-16 02:00) [10]

Джо это обрашение было не к тебе прости если не так высказался в твою сторону


 
Джо ©   (2005-11-16 02:10) [11]

Сообщение об ошибке говорит о том, что где-то в коде происходит обращение к нулевому указателю. То есть, ты ожидаешь, что в переменной на момент вызова содержится ссылка на объект, в то время, когда в ней содержится значение nil (0).
Самое лучшее, что можно предложить - начинай переделывать код, руководствуясь некоторомы простейшими правилами:

1. Уничтожай объект только на том же уровне кода, в котором он был создан. В одной процедуре создал, В ЭТОЙ ЖЕ и уничтожай. Желательно с использованием секций try/finally.
2. Не маскируй ошибки - не делай пустых блоков except.
3. Сведи к самому минимуму использование глобальных переменных, например существует совсем немного причин, по которым код, указанный Плохишем в [6] имел бы право на существование.

П.С. Совсем не нужно хамить, тебе действительно указали на твои ошибки.


 
Джо ©   (2005-11-16 02:13) [12]

Пункт 1 немного дополню.
На одном уровне означает не только уровень одной процедуры, но, иногда и уровень класса и даже модуля.


 
MRAk   (2005-11-16 02:24) [13]

да до меня доперло перед тем как я прочитал твое сообшение...
fs само уничтожается после отправки... странно канешно но это так! =)))(для меня странно...)
на счет глобальных.. это я просто у когодо выдрал и код ещё не правил...

Извените за несправедливый гнев... просто я хотел сказать не надо просто насехатся над чужими ошибками покажи и обясни... может и я чегонить не понял!
Спасибо большое


 
MRAk   (2005-11-16 02:26) [14]

Всмысле я выдрал небольшой кусок кода с полоской прогресса и руки ещё не дошли исправить!


 
Digitman ©   (2005-11-16 15:23) [15]


> fs само уничтожается после отправки... странно канешно но
> это так! =)))(для меня странно...)


стандартная справка на эту тему писана не для Пушкина, а для тебя.

там черным по белому написано про уничтожение потока.

и "допирать" не надо при этом - достаточно справку почитать внимательно.


> не надо переносить в сети... вопрос не по ним


много ты еще шишек набъешь себе при таком подходе).. именно в справке по TCustomWinSocket написано про SendStream() ... а использование TCustomWinSocket имеет практически прямое отношение к "Сетям"



Страницы: 1 вся ветка

Текущий архив: 2005.12.04;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.201 c
1-1131462242
Веретен
2005-11-08 18:04
2005.12.04
необходимо очистить все TlistBox`ы на странице TTabSheet


14-1131642620
as_us
2005-11-10 20:10
2005.12.04
Где достать инфу


2-1132031785
froz
2005-11-15 08:16
2005.12.04
TXMLDocument!


2-1131916842
Muh
2005-11-14 00:20
2005.12.04
Как создать папку..не файл, а папку!!


5-1114000303
Aleksandr.
2005-04-20 16:31
2005.12.04
Как можно сделать со своими объектами, чтобы они были доступны