Текущий архив: 2006.12.17;
Скачать: CL | DM;
ВнизМетодики разработки в условиях нехватки ресурсов. Найти похожие ветки
← →
Alex_p (2006-11-23 07:34) [160]Жалко что тему начатую Sergey Masloff испортили
← →
SlymRO (2006-11-23 08:00) [161]KSergey © (23.11.06 7:28) [159]
Вранье. В COM - нет исключений. Поверьте уж. Только коды ошибок.
Вранье. E_FAIL - тоже исключительная ситуация только отформатированая под COM. Среда выполнения .Net сама конвертнет напогашенное исключение, в понятное COM менеджеру, и COM "вызывателю" сообщение-код. На COM уровне все что не S_OK - подобно Exception"у.
← →
SlymRO (2006-11-23 08:08) [162]Удалено модератором
← →
KSergey © (2006-11-23 08:14) [163]Не разеляю ржачного настроения по данному вопросу, но дальше эту тему развивать не буду. Неочем.
А вот изначальная тема действительно весьма интересна (ведь ресурсов всехда не хватает. по определению), хотя и хороших постов по ней - крайне мало. Может кто-то еще выскажется.
← →
SlymRO (2006-11-23 08:25) [164]KSergey © (23.11.06 8:14) [163]
хороших постов по ней - крайне мало
Согласен. И книг по теме мало. Я сейчас читаю книгу "Путь камикадзе" - про обреченные софтовые проекты и управление в них.
← →
SlymRO (2006-11-23 08:39) [165]Удалено модератором
← →
Anatoly Podgoretsky © (2006-11-23 09:18) [166]> SlymRO (23.11.2006 04:41:30) [150]
> 3. Не стоит оставлять пустой except (НО ТОЛЬКО ПРИ ОСТРОЙ НЕОБХОДИМОСТИ, КОТОРУЮ НУЖНО ИСКОРЕНЯТЬ В ЗАЧАТКЕ).
Это никогда не нужно делать, поскольку всегда можно написать
except
on E:Exception do begin
ErrorMsg := E.Message;
// Log(ErrorMsg);
Exit;
end;
end;
Что позволит поставить точку останова и проанализировать в отладчике. И ловить не надо, просто поставить точку и ждать.
← →
Piter © (2006-11-23 17:54) [167]SlymRO (23.11.06 4:41) [150]
Не стоит терять ссылку на созданный объект, без 100% гарантии что другой объект контейнер взял над ним Ownership - TaskManager.AddTask(TTask.Create(cFormateDisk, s))
в целом да. Но пример показывал не те аспекты, к которым вы придираетесь. Пример показывал прототип ситуации, когда except пустой. В частности, ситуация, когда в except должен быть задан код ошибки, который уже задан по дефолту, надо его просто оставить.
Что касается терять ссылку - то это может быть вполне самодостаточный класс, например потомок от TThread, который полностью себя сам уничтожит в конце работы.
Хотя идеологически верней контролировать, конечно.
Соответственно, пункт 2 тоже не совсем в кассу.
SlymRO (23.11.06 4:41) [150]
Result := -1; в начале процедуры, может не гарантировать сохранение результата после Исключения!
ну ты просто бредишь. И твои примеры полностью идентичны по функционалу, ничего переписывать не надо.
Result - это просто ПЕРЕМЕННАЯ. Ты хочешь сказать, что в таком коде:a := 5;
try
TSomeObject.create(...);
except
end;
ShowMessage(IntToStr(i));
переменная "a" может изменить свое значение с пятерки?
← →
Piter © (2006-11-23 18:02) [168]Удалено модератором
Примечание: Выражения выбираем
← →
Romkin © (2006-11-23 18:28) [169]SlymRO (23.11.06 08:00) [161]
> Вранье. В COM - нет исключений. Поверьте уж. Только коды
> ошибок.
Как объяснить наличие IErrorInfo? Там есть исключения. Механизм передачи информации в данном случае не имеет значения. Более того, в .NET COM генерирует именно исключения.
← →
Kerk © (2006-11-23 19:02) [170][159] KSergey © (23.11.06 07:28)
> WinAPI предоставляет средства для работы с исключениями?
> Может я чего не знаю?
SEH
← →
SlymRO (2006-11-24 07:48) [171]Piter © (23.11.06 17:54) [167]
Result - это просто ПЕРЕМЕННАЯ. Ты хочешь сказать, что в таком коде:
a := 5;
try
TSomeObject.create(...);
except
end;
ShowMessage(IntToStr(i));
переменная "a" может изменить свое значение с пятерки?
Влегкую... Переменная это память, а память можно write: Стоит в TSomeObject.create(...) некорректно поработать с памятью/стеком или регистрами, и вуаля - в "a" мусор...program Project2;
{$APPTYPE CONSOLE}
uses
SysUtils;
var a:integer;
type
TSomeObject=class
public
constructor Create;
end;
constructor TSomeObject.Create;
var p:pinteger;
begin
p:=pointer($40300C);
p^:=25;
abort;
inherited;
end;
begin
a:=5;
try
TSomeObject.create();
except
end;
writeln(IntToStr(a));
readln;
end.
← →
Piter © (2006-11-24 18:52) [172]SlymRO (24.11.06 7:48) [171]
p:=pointer($40300C);
ты рассчитываешь на то, что переменная a с каждым запуском программы будет расположена по одному адресу. Вообще не факт.
SlymRO (24.11.06 7:48) [171]
Влегкую... Переменная это память, а память можно write: Стоит в TSomeObject.create(...) некорректно поработать с памятью
нет, ну понятно, что целенаправленно можно и значения КОНСТАНТ изменять. Но что теперь, говорить о том, что константы - на самом деле не константы? :)))
Страницы: 1 2 3 4 5 вся ветка
Текущий архив: 2006.12.17;
Скачать: CL | DM;
Память: 0.74 MB
Время: 0.052 c