Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.03.27;
Скачать: CL | DM;

Вниз

Выстраданый совет...   Найти похожие ветки 

 
Danilka ©   (2003-03-05 09:25) [0]

Никогда, ни при каких обстоятельствах, не следует использовать сторонние бесплатные компоненты в коммерческих проектах...

Иначе возникнет ситуация, когда ошибка именно в этой компоненте, а предъявить претензии некому - только себе... и приходится рыться в километрах чужих исходников, тогда, когда проект уже сдан, люди работают, и каждая минута задержки клиента...

Тут уже когда-то упоминали это, но прочуствуешь только когда по себе самому шарахнет... дурак учится на своих ошибках...


 
stone ©   (2003-03-05 09:30) [1]

2 Danilka © (05.03.03 09:25)


> дурак учится на своих ошибках...


... а умный - на чужих :))


 
Кот Бегемот ©   (2003-03-05 09:33) [2]

>рыться в километрах чужих исходников

RxLib & FreeReport перерыт мною лично несколько раз - и ниче зазорного в этом не вижу - ибо использовать надо не сдуру - а лишь после детального изучения :)

Всег благ - Кот Бегемот :)))


 
Danilka ©   (2003-03-05 10:10) [3]

stone © (05.03.03 09:30)
...

Кот Бегемот © (05.03.03 09:33)
все верно, нефиг качать что попало с торри.нет...

Кто-нибудь может объяснить как такое происходит, есть вот-такая функция:

procedure TForm1.Button1Click(Sender: TObject);
var
s:string;
begin
calc:=TCalcul.Create;
calc.Variables:=memo1.lines.Text;
calc.Formula:=edit1.Text;
s:=calc.Calc;
FreeAndNil(calc);
inc(i);
label1.Caption:="count:"+inttostr(i)+" vol:"+s;
end;

i - integer, объявленнвй в классе TForm1, в секции public.
TCalcul - класс, разбирающий мат. выражения, взял его на торри.нет, поленился сам рисовать (на свою голову), так вот,
после того, как эта процедура выполняется 89 раз (i=89), calc.Calc возвращает пустую строку, после чего, давим еще раз на эту кнопку и получаем аццесс виолейшен.
Почему???
Ведь этот нехороший calc прибивается, и не просто прибивается намертво, каждый раз создается заново, следовательно???
Ни в memo1, ни в edit1 ничего не меняю...


 
Danilka ©   (2003-03-05 10:15) [4]

мое мат. выражение: x1+x2+x3...+x40

все переменные x1..x40 равны 1, первые 89 раз этот calc добросовестно вовзращает правильный результат вычисления, то есть число 40, а потом...


 
Слесарь Матерящийся ©   (2003-03-05 10:15) [5]

В коммерческих проектах сторонние компоненты лучше не использовать.
А если использовать, то заказывать сторонним программистам за бабки ($$$); и подключать их (сторонних программистов) к проекту (временно).


 
REA ©   (2003-03-05 10:15) [6]

А он наверно глобальные переменные держит или у него лимит на 89 запусков :)


 
Danilka ©   (2003-03-05 10:17) [7]

Слесарь Матерящийся © (05.03.03 10:15)
Дык, обидно, споткнулся на такой фигне, разбор мат выражений, это-же классика, просто в этом модуле есть еще дополнительные мат. функции, поэтому я его и использовал, а он вон-как...


 
Danilka ©   (2003-03-05 10:18) [8]

REA © (05.03.03 10:15)
посмотрел исходники - никаких глобальных переменных, и никакого лимита...


 
troits ©   (2003-03-05 10:24) [9]

>Danilka © (05.03.03 10:18)

Мистика :)


 
Leon Crom ©   (2003-03-05 10:28) [10]


> Danilka © (05.03.03 09:25)

как вариант можно использовать ломаные триальные версии компонент, я понимаю что это не красиво, но слишком уж велико искушение, а самому написать что либо подобное не хватает фантазии усидчивости и знаний...


 
Danilka ©   (2003-03-05 10:30) [11]

Leon Crom © (05.03.03 10:28)

дык, платные тоже могут быть кривыми, но, если ты их покупаешь, то потом можешь предьявить ошибки тому, кто их писал, и требовать их исправления, а вот со сломаных или халявных спроса нет...


 
Fredericco ©   (2003-03-05 10:30) [12]

Я в таких случаях (акцесс виолятион), в качестве проверки создаю один раз в и один раз фрии. Иногда помогает.
Был случай, простая прога.
Мой объект. При иннициализации делаю крейт, при финализации фрее.
Иногда при инициализации ацсесс виолятион. Причем проверял отдельно: если объект уже создан повторное его создание ошибок не вызывало. ?? Помогло
If not Assign(MyObject) then MyObject:=TMyObject.Create(nil)

Попробуй, может поможет.


 
Danilka ©   (2003-03-05 10:32) [13]

troits © (05.03.03 10:24)
не то слово...

нашел там внутри одну процедурку, deltree, она при каждом вызове Button1Click срабатывает радное кол-во раз...
Слово random в тексте модуля нигде не встречается...


 
Danilka ©   (2003-03-05 10:34) [14]

Fredericco © (05.03.03 10:30)
дык, я примерно так сначала и делал. но в этом случае ацесс виолейшон срабатывает не на 89-й раз, а гораздо раньше...


 
Leon Crom ©   (2003-03-05 10:49) [15]

если не в лом можешь выслать мне по мылу эту хрень, любопытно...


 
Fredericco ©   (2003-03-05 10:52) [16]

Danilka © (05.03.03 10:34)
Сразу, или там на 5-й или 10-й?


 
Danilka ©   (2003-03-05 10:57) [17]

Leon Crom © (05.03.03 10:49)
все выслал.
не знаю что я там натворил, вроде потрассировал пару раз, какие-то куски текста закомментарил, убрал комментарии, но теперь аццесс виолейшон дергается не на 90-й раз, а на 495-й...


 
Danilka ©   (2003-03-05 10:57) [18]

Fredericco © (05.03.03 10:52)
когда как, но до 10-го не доходит...


 
Leon Crom ©   (2003-03-05 11:03) [19]


> Danilka ©

сейчас гляну


 
NailS ©   (2003-03-05 11:06) [20]


> Danilka © (05.03.03 10:57)

выложил бы ссылочку на этот компонент. А то так на торри его не видно.


 
Danilka ©   (2003-03-05 11:13) [21]

NailS © (05.03.03 11:06)
http://www.tsoft.szm.com/calcul.zip


 
Leon Crom ©   (2003-03-05 11:20) [22]

> Danilka ©
эта хрень по ходу определяет текущцю дату... это входит в условия задачи...


 
Danilka ©   (2003-03-05 11:32) [23]

Leon Crom © (05.03.03 11:20)
а как это влияет? да и не нужна мне дата, у меня в формуле никаких операций с датой нет...


 
Danilka ©   (2003-03-05 11:33) [24]

вообще, модуль работал без проблем, как часы, но до тех пор, пока у юзеров не стало появляться слишком много переменных...
чем больше переменных используется, тем больше вероятность возникновения ошибки.


 
Leon Crom ©   (2003-03-05 11:50) [25]

по моему (хотя хер его знает на сколько это правильно) но там эта Deltree чето химичит с датами а точнее определяет номер текущей недели если это на фиг надо попробуй закоментировать
Delvek(t);
freemem(t);
в function TCalcul.deltree(t:PCalc_Tree):pointer;
перед эксептом...
если честно то я закоментил полностью делтри (вроде работает)


 
DiamondShark ©   (2003-03-05 11:53) [26]


> дык, платные тоже могут быть кривыми, но, если ты их покупаешь,
> то потом можешь предьявить ошибки тому, кто их писал, и
> требовать их исправления


Наивная девичья простота.

А те, кто их писал, предъявят лиценз агримент, где написано "...as is without warranty of any kind..." и в лучшем случае предложат заглянуть в баг-лист и купить новую версию. Вот тут-то вы и поймёте, что действительно "ass is".
А требовать чего-то можно только имея полноценный двусторонний договор.


 
Danilka ©   (2003-03-05 11:53) [27]

я тоже думаю, что с ней не все впорядке... какие-то исключения валятся, а она на них ложит:
except;
end;

сейчас думаю как-бы ее полечить, не прибивая, не получится, придется убить...


 
NailS ©   (2003-03-05 11:55) [28]

Посмотри вот это место в коде.

Было

procedure TCalcul.Addvek(t:pointer);
begin
inc(cVek);
if cVek>MaxVek then begin
MaxVek:=Maxvek+50; SetLength(fVek,MaxVek);
end;
PCalc_tree(t)^.id:=cVek;
fVek[cVek]:=t;
end;

Стало

procedure TCalcul.Addvek(t:pointer);
begin
inc(cVek);
// Здесь была бяка
if cVek> MaxVek - 1 then begin
// В условии расширения массива (чего спрашивается списки не использоваь)
MaxVek:=Maxvek+50; SetLength(fVek,MaxVek);
end;
PCalc_tree(t)^.id:=cVek;
fVek[cVek]:=t;
end;


Я догнал до 500 вычислений проблем не возникало.


 
Anatoly Podgoretsky ©   (2003-03-05 11:58) [29]

Danilka © (05.03.03 10:10)
Кто-нибудь может объяснить как такое происходит, есть вот-такая функция:

procedure TForm1.Button1Click(Sender: TObject);
var
s:string;
begin
calc:=TCalcul.Create;
calc.Variables:=memo1.lines.Text;
calc.Formula:=edit1.Text;
s:=calc.Calc;
FreeAndNil(calc);
inc(i);
label1.Caption:="count:"+inttostr(i)+" vol:"+s;
end;

Не знаю что там в компоненте, но у тебя необоснованное применение глобальной переменной calc, попробуй объявить ее в процедуре и убери эту хрень FreeAndNil, замени на Free
Подобное говорить о неверном дизайне, о попытке повторного использования и как правило ведет к ошибкам.


 
Danilka ©   (2003-03-05 12:06) [30]

NailS © (05.03.03 11:55)
спасибо, сейчас посмотрю...

Anatoly Podgoretsky © (05.03.03 11:58)
procedure TForm1.Button1Click(Sender: TObject);
var
calc: TCalcul;
s:string;
begin
calc:=TCalcul.Create;
calc.Variables:=memo1.lines.Text;
calc.Formula:=edit1.Text;
s:=calc.Calc;
calc.free;
inc(i);
label1.Caption:="count:"+inttostr(i)+" vol:"+s;
end;

Результат тот-же самый, вылетает на том-же самом месте, вообще я начинал с того, что создавал calc при создании формы, но тогда аццесс виолейшон срабатывал гораздо быстрее... Потом стал его создавать в самой процедуре и прибивать с помощью free, чем немного отсрочил ошибку, потом заменил free на freeAndNil, что никак не повлияло на работу.


 
Danilka ©   (2003-03-05 12:10) [31]

NailS © (05.03.03 11:55)
точно, здесь был глюк, спасибо огромное :)))


 
Satirus   (2003-03-12 19:51) [32]

вот вы говорите о сторонных и плантых компонентах,
а мой шеф нашел ошибку в бесплатном индийском компоненте, причём требовалось только дописать в конец строки #10#13, а из-за этой херни валилась работа человека, который програмировал под соляркой на сях, и разбирал те файлы, которые сохранялись моим активиксом на серваке...
постараюсь назвать имя юнита и место, в котором это присходит



Страницы: 1 вся ветка

Текущий архив: 2003.03.27;
Скачать: CL | DM;

Наверх




Память: 0.55 MB
Время: 0.033 c
1-87913
OxyGenASG
2003-03-17 10:22
2003.03.27
ExpressQuantumGrid от Developer Express


14-88215
sancho
2003-03-11 18:57
2003.03.27
Есть ли бесплатные домены для своего сайта?


14-88205
vendoor
2003-03-11 14:00
2003.03.27
Помогите найти SUIPACK + CRACK к нему


1-88056
pet
2003-03-15 13:41
2003.03.27
Другое приложение и трей


14-88197
alxx
2003-03-09 22:57
2003.03.27
Иконки