Форум: "Прочее";
Текущий архив: 2006.04.23;
Скачать: [xml.tar.bz2];
ВнизTry if and GetLastError Найти похожие ветки
← →
balepa © (2006-03-30 10:54) [0]Здрасьте, Всем
Посмотрите кому не лень, правильно ли расставил if"ы и try"и
Еще и варниг вылазит:
[Warning] ServerUnit.pas(115): Variable "SBuf" might not have been initialized нужно ли от него "избавится"(если да то как) или ничего "страшного" не случится (имеется ввиду не приведет когда нибудь к ошибкам)
Еще если неправильно указать путь к фаилу в CreateProcess должно попадать в except, если да то почему не попадает, а GetLastError(если его вызвать в "else") выдает операция выполнена успешноprocedure TForm1.ClientRead(Sender: TObject; Socket: TCustomWinSocket);
var
SI: TStartupInfo;
PI: TProcessInformation;
ComLine: AnsiString;
Len: Integer;
RBuf: Pointer;
SBuf: ^Byte;
Data: Double;
begin
Len:= Socket.ReceiveLength;
GetMem(RBuf,Len);
try
Socket.ReceiveBuf(RBuf^,Len);
Data:= Double(RBuf^);
ComLine:= FloatToStr(Data);
Len:= Pos(",",ComLine);
ComLine:= Copy(ComLine,1,Len-1) + Copy(ComLine,Len+1,Length(ComLine));
GetStartupInfo(SI);
SI.wShowWindow := SW_NORMAL;
try
CreateProcess(PChar("C:\Windows\Рабочий стол\Process.exe"), PChar(ComLine), nil, nil, false, NORMAL_PRIORITY_CLASS, nil, nil, si, pi);
if pi.hProcess > 0 then
begin
Inc(QueryG);
LQueryG.Caption:= IntToStr(QueryG);
GetMem(SBuf,SizeOf(Byte));
SBuf^:= 77;
inc(QueryWork);
Inc(QueryCount);
LQueryCount.Caption:= IntToStr(QueryCount);
LQueryWork.Caption:= IntToStr(QueryWork);
end
else begin
ErrorLog("Process NOT Started",Socket.RemoteHost);
GetMem(SBuf,SizeOf(Byte));
SBuf^:= 2;
end;
except
//oherError
ErrorLog(SysErrorMessage(GetLastError),Socket.RemoteHost);
end;
CloseHandle(PI.hProcess);
finally
try
Socket.SendBuf(SBuf^,SizeOf(Byte));
except
ErrorLog(SysErrorMessage(GetLastError),Socket.RemoteHost);
end;
FreeMem(RBuf,SizeOf(Byte));
FreeMem(SBuf,SizeOf(Byte));
end;
Socket.Close;
end;
← →
Grom PE © (2006-03-30 11:24) [1]Можно поставить SBuf:=nil перед первым try
Остальное - ой, лень :)
← →
balepa © (2006-03-30 11:32) [2]
> Grom PE © (30.03.06 11:24) [1]
Да и за это спасибо, а че я то не додумался?
А в чем смысл варнинга? Я же всеравно присваиваю SBuf"у значение.
← →
Думкин © (2006-03-30 11:33) [3]В страницу не влазит.
← →
Nikolay M. © (2006-03-30 11:44) [4]
> try
> CreateProcess(PChar("C:\Windows\Рабочий стол\Process.
> exe"), PChar(ComLine), nil, nil, false, NORMAL_PRIORITY_CLASS,
> nil, nil, si, pi);
> if pi.hProcess > 0 then
> begin
> Inc(QueryG);
> LQueryG.Caption:= IntToStr(QueryG);
> GetMem(SBuf,SizeOf(Byte));
> SBuf^:= 77;
> inc(QueryWork);
> Inc(QueryCount);
> LQueryCount.Caption:= IntToStr(QueryCount);
> LQueryWork.Caption:= IntToStr(QueryWork);
> end
> else begin
> ErrorLog("Process NOT Started",Socket.RemoteHost);
> GetMem(SBuf,SizeOf(Byte));
> SBuf^:= 2;
> end;
> except
> //oherError
> ErrorLog(SysErrorMessage(GetLastError),Socket.RemoteHost);
>
> end;
Если чисто умозрительно при CreateProcess у тебя возникнет Exception, SBuf останется непроинициализированным. А после этого в finally ты попытаешься записать данные из SBuf в сокет и скорее всего получишь Access Violation.
← →
BiN © (2006-03-30 11:49) [5]Несколько замечаний:
1)if pi.hProcess > 0 then
я бы заменил наif CreateProcess(...) then
т.к. ты не обнуляешь структуру PI до вызова CreateProcess.
2) заменил быErrorLog(SysErrorMessage(GetLastError),Socket.RemoteHost);
наon E:Exception do ErrorLog(E.Message,Socket.RemoteHost)
← →
balepa © (2006-03-30 11:52) [6]
> BiN © (30.03.06 11:49) [5]
Спасибо, учтемс.
> Nikolay M. © (30.03.06 11:44) [4]
Спасибо, недоглядел.
← →
Nikolay M. © (2006-03-30 11:56) [7]
> Спасибо, недоглядел.
Это хуже чем недоглядел. Это означает, что ты не представляешь себе логику работу этого куска кода :(
Конечно, ворнинги немного помогают, но лучше, если программа сразу пишется так, чтобы их не было изначально.
← →
balepa © (2006-03-30 12:08) [8]
> Nikolay M. © (30.03.06 11:56) [7]
Это имено недоглядел, ИМХО. Просто несколько "проектов" одновременно (VB, Delphi) вот и запарился.
Только не спрашивайте почему все на Delphi не делаю.
← →
Nikolay M. © (2006-03-30 12:15) [9]
> Это имено недоглядел, ИМХО.
Ну, хорошо, если так.
Страницы: 1 вся ветка
Форум: "Прочее";
Текущий архив: 2006.04.23;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.013 c