Текущий архив: 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