Delphi 7 И Сборка Проекта -- Каждый Раз По Новому?

erhe

Well-known member
05.03.2013
48
0
#1
Здравствуйте.

Вопрос, видимо, чисто академический, но мне немного неприятно ;)

Имеется консольное приложение написанное на Дельфи 7. Оно обрабатывает входные данные и, если всё хорошо, формирует выходной файл. Или записывает ошибки, чтобы пользователь мог их обработать и повторить обработку.

Данные прогоняются через множество проверок. Для пары проверок был написан такой код (упрощаю, оставляю только нужное):

Код:
function Fun1(const AList: TStringList): Boolean;
var
dd: TDateTime;
i: Integer;
begin
dd := TMyClass(AList.Objects[0]).DateR;
. . .
end;

function Fun2(const AList: TStringList): Boolean;
var
dd: TDateTime;
i: Integer;
begin
dd := TMyClass(AList.Objects[0]).DateDr;
. . .
end;
Эти функции вызываются последовательно и только тогда, когда в списке есть данные. Т.е., всегда AList.Count >= 1.

К чему пост. Через пару месяцев потребовалось поменять зашитую в приложение константу -- так сделано специально, чтобы ушлые пользователи не могли жульничать. Поменял значение константы, нажал "Save", потом "Build". И получил при работе ошибку в Fun1():
при первом присваивании -- выход индекса на границы массива.

Запустил в отладчике: да, в списке есть 1 значение; да, TMyClass().DateR -- возвращает в отладчик значение, но присваивания не происходит. Причем! Если закомментировать вызов Fun1() и сразу пойти в Fun2() -- всё работает на тех же данных!

Ладно, посколько время не ждет, сделал изврат и обошел случай 1 элемента через if. Через пару месяцев снова поменял значение константы и, поскольку время было, вернул код к первоначальному без извращенного if -- всё работает.

А потом было ещё веселее. Поменяли значение константы -- не работает. Вернули на то, что было -- не работает. Снова поставили нужное значение и после 4-5 нажатия на build -- заработало.

Такое ощущение, что Дельфи 7 на одних и тех же исходниках собирает разные exe-шки! Бред просто какой-то...

Кто стаким сталкивался или знает как лечить? Грустно наступать на грабли в отлаженном коде...
 

nforumer

New member
09.10.2012
1
0
#2
Могу лишь сказать, что глюки есть в любых программах. Особенно в тех, которые пишем мы сами))) С подобными вещами сталкивался, но объяснения так и не нашёл. Иногда в таких случаях помогает перезагрузка Delphi (или другой среды разработки, так как глючит не только Delphi)))
 

Vadik(R)

Well-known member
12.12.2007
469
0
#3
Здравствуйте.

Вопрос, видимо, чисто академический, но мне немного неприятно ^_^

Имеется консольное приложение написанное на Дельфи 7. Оно обрабатывает входные данные и, если всё хорошо, формирует выходной файл. Или записывает ошибки, чтобы пользователь мог их обработать и повторить обработку.

Данные прогоняются через множество проверок. Для пары проверок был написан такой код (упрощаю, оставляю только нужное):

Код:
function Fun1(const AList: TStringList): Boolean;
var
dd: TDateTime;
i: Integer;
begin
dd := TMyClass(AList.Objects[0]).DateR;
. . .
end;

function Fun2(const AList: TStringList): Boolean;
var
dd: TDateTime;
i: Integer;
begin
dd := TMyClass(AList.Objects[0]).DateDr;
. . .
end;
Эти функции вызываются последовательно и только тогда, когда в списке есть данные. Т.е., всегда AList.Count >= 1.

К чему пост. Через пару месяцев потребовалось поменять зашитую в приложение константу -- так сделано специально, чтобы ушлые пользователи не могли жульничать. Поменял значение константы, нажал "Save", потом "Build". И получил при работе ошибку в Fun1():
при первом присваивании -- выход индекса на границы массива.

Запустил в отладчике: да, в списке есть 1 значение; да, TMyClass().DateR -- возвращает в отладчик значение, но присваивания не происходит. Причем! Если закомментировать вызов Fun1() и сразу пойти в Fun2() -- всё работает на тех же данных!

Ладно, посколько время не ждет, сделал изврат и обошел случай 1 элемента через if. Через пару месяцев снова поменял значение константы и, поскольку время было, вернул код к первоначальному без извращенного if -- всё работает.

А потом было ещё веселее. Поменяли значение константы -- не работает. Вернули на то, что было -- не работает. Снова поставили нужное значение и после 4-5 нажатия на build -- заработало.

Такое ощущение, что Дельфи 7 на одних и тех же исходниках собирает разные exe-шки! Бред просто какой-то...

Кто стаким сталкивался или знает как лечить? Грустно наступать на грабли в отлаженном коде...
Если один и тот же код скопилировать два раза подряд, то exeшки уже побайтово будут отличаться. Сам с твоей проблемой не сталкивался. Но если код модульный, попробую удалить файлы *.dcu, может он их как закешировал и не думает перестраивать? (Просто предположение)