Форум: "Основная";
Текущий архив: 2003.04.14;
Скачать: [xml.tar.bz2];
ВнизОптимизатор убирает нужную строчку? Найти похожие ветки
← →
Num Lock (2003-04-02 10:57) [0]
function ShowForm: Integer;
begin
Result:= 0;
<НЕКОТОРЫЙ КОД>
MainFrm:= TMainFrm.Create(Application);
try
Result:= MainFrm.ShowModal;
finally
MainFrm.Free;
end;
end;
При компиляции компилятор не включает в результирующий код первую строчку - Result:= 0; Из-за чего при возникновении ошибки при выполнении <НЕКОТОРОГО КОДА> возвращаемое функцией значение оказывается непроинициализированным.
← →
Skier (2003-04-02 11:00) [1]Оптимизацию отключи...:)
← →
Num Lock (2003-04-02 11:03) [2]А если её отключить, то все неиспользуемые функции из используемых модулей тоже прикомпилируются?
← →
MVVD (2003-04-02 11:04) [3]Вставь Result:=0; в finally
← →
Skier (2003-04-02 11:05) [4]Нет.
К оптимизации это не относится...
← →
Anatoly Podgoretsky (2003-04-02 12:02) [5]Если произойдет ошибка, то значение возвращаемое функцие не определено.
Но оптимизатор не убирает нужных строчек, только не нужные, видимо у тебя в <НЕКОТОРЫЙ КОД> есть присвоение.
← →
Skier (2003-04-02 12:03) [6]Согласен с Anatoly Podgoretsky.
Хорошо бы увидеть этот самый <НЕКОТОРЫЙ КОД> :)
← →
Num Lock (2003-04-02 12:29) [7]Вот такой код написал специально, что бы вызвать ошибку. А функция находится в Dll:
function ShowDllForm: Integer;
begin
Result:= 0;
MainFrm.ShowModal;
MainFrm:= TMainFrm.Create(Application);
try
Result:= MainFrm.ShowModal;
finally
MainFrm.Free;
end;
end;
Проверил таким кодом:
try
i:= ShowDllForm;
finally
ShowMessage(IntToStr(i));
end;
Показывает "-1728232840", т.е. не инициализируется.
← →
Skier (2003-04-02 12:41) [8]Чудеса какие-то...:)
1) А как насчёт соглашения о перечади параметров и передачи
Handle-a host-приложения ?
2) Отключение оптимизации тоже не помогает ?
← →
Anatoly Podgoretsky (2003-04-02 12:52) [9]В случае ошибки возвращаемое значение не определено, бессысленно, надо просто обрабатывать ошибку.
try
try
i := ShowDllForm;
except
i := предопределенное значение при ошибки;
или что еще важнее, какие нибудь осмычленные действия при ошибке.
end;
finally
...
Толку в обработке нет, поскольку ты вылетишь на первый по уровню обработчик ошибки, если такого не будет, то вообще из программы.
← →
Num Lock (2003-04-02 12:56) [10]>Skier © (02.04.03 12:41)
Попробовал - разместил функцию в том-же приложении.
function ShowForm: Integer;
var
Form2: TForm2;
begin
Result:= -1;
Form2.ShowModal;
Form2:= TForm2.Create(Application);
try
Result:= Form2.ShowModal;
finally
Form2.Free;
end;
end;
Многократная проверка с кодом указанном выше.
При включённой оптимизации - всё время i принимает разные значения.
При выключенной - строчка Result:= 0; не убирается, но ShowMessage(IntToStr(i)); показывает "309" (?????), пробовал запускать 5-6 раз.
← →
Anatoly Podgoretsky (2003-04-02 12:59) [11]Настойчивый ты челоаек :-)
← →
Skier (2003-04-02 13:02) [12]А ежели так :
function ShowForm: Integer;
var
Form2: TForm2;
begin
Result:= 1;
try
Form2.ShowModal;
Form2:= TForm2.Create(Application);
try
Result:= Form2.ShowModal;
finally
Form2.Free;
end; //try
except
Result := 0;
on E : Exception do ShowMessage(E.Message);
end; //try
end;
← →
Num Lock (2003-04-02 13:05) [13]>В случае ошибки возвращаемое значение не определено, бессысленно.
Если присвоить возвращаемое значение глобальной переменной, то тогда оно может иметь иметь смысл (необходимость), даже если во время выполнения функции возникла ошибка. А всё-таки, почему всегда 309?
← →
Anatoly Podgoretsky (2003-04-02 13:09) [14]Да потому что такое значение в ячейке памяти/регистре - просто случайное значение.
Еще раз пойми - при возникновении исключения возвращаемое значение неопределено
← →
Num Lock (2003-04-02 13:16) [15]>>Anatoly Podgoretsky © (02.04.03 13:09)
Теперь понял, прошу прощения за безграмотность, наверно это элементарные вещи.
>>Skier © (02.04.03 13:02)
>>А ежели так
С небольшими исправлениями синтаксиса
"
on E : Exception do
begin
ShowMessage(E.Message);
Result := 0;
end;
"
всё правильно, первая строчка убирается, возвращается как и положено 0, обработка исключения прерывается.
← →
Skier (2003-04-02 13:18) [16]>Num Lock (02.04.03 13:16)
"Ну теперь твоя душенька довольна ?" :)
← →
Num Lock (2003-04-02 13:19) [17]Да, ненадолго удовлетворил потребность в познании.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.04.14;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.009 c