-
смысл менять архитектуру?
а смысл перекомпиливать?
-
понять это глюк новых делфи в связке с БДЕ или что
у тебя эксепшен бдешный?
ни разу.
он поднимается не из бде.
так откуда мысли про какие-то связки?
-
120 параметров, которые биндятся по индексу вместо поимени......
ты вообще уверен, что когда дфм переколбашивался из д7 в хе то все они остались на своих местах?
-
захотелось просто перейти на более новый делфи. ведь неизвестно как будет старый делфи7 работать под новыми виндосами (8,10)
не ожидал такой засады от обычной процедуры.
мысль про связку возникла потому что малая вероятность что все делфи новее делфи7 имеют такой глюк.
а глюк связки более вероятен из-за устаревшей архитектуры БДЕ и новой делфи.
вот и ищу откуда ноги растут изза спортивного интереса.
поменяв ASSTRING на VALUE проблема исчезла.
поэтому так и оставлю, без смены архитектур.
-
>кгшзх
остались все на местах потому что когда поменял ASSTRING на VALUE то все заработало
при потере параметров при переколбасеньи были бы ошибки
-
а чем может быть чревато использование VALUE?
Params[12].value := strtofloat(edit14.text);
Params[13].value := strtofloat(edit6.text);
Params[14].value := strtofloat(edit7.text);
в литературе видел и такое присвоение , то есть это допустимо?
-
остались все на местах потому что когда поменял ASSTRING на VALUE то все заработало
вот как раз потому что полегчало от замены на value, я бы и не был так уверен что параметры сохранили индексы.
применив value ты получил доп. сервис вариантов по преобразованию типов.
что как бы и намекает на то, что параметры могли перемешаться по индексам по сравнению с D7
-
> Просто "Invalid Floating Point Operation" - операция с числом.
много кто с числами работает, даже размер фонта (строки) пересчитывают с их участием.
> Чаще всего деление на ноль.
не, там другая ошибка - "divide by zero".
> Params[13].Asstring := 'ddffdf';
в новых юникод по умолчанию... может и параметры widestring-ом сделать?
> ведь неизвестно как будет старый делфи7
известно, нормально работает, у нас до сих пор это основной инструмент и менять не собираются. для старых проектов уж точно. новые может быть, но тоже сомнения, тогда придется отказаться от кучи наработок, и все переписывать (под фаремонкей/под 64 битность и т.д. а менять просто чтобы скомпилировать другим, ничего не меняя... нафиг).
-
>кгшзх
в смысле перемешаться параметры по номерам?
ок, проверю
>sniknik
да я тоже не бегу впереди прогресса. понятно ,что то, что работает, трогать не нужно.
но не ожидал что в простом проекте сразу такие грабли будут непонятные.
и хотелось потихоньку переходить на поновей делфи.
насчет widestring- попробую
спасибо за советы
-
Был у меня такой код:
function MyFloatTest (fl : Single) : Single;
function MyFloatToIEEE(fl : Single) : Single;
//
var
fl : Single;
Data : PByte;
begin
//
fl := PSingle(Data)^;
fl := MyFloatTest(fl);
fl := MyFloatToIEEE(fl);
//
И работало оно.
А потом, как раз после переезда на новую версию,
иногда, в зависимости от фазы луны (как выяснилось - младших битов мантиссы MyFloato'в)
начало хромать.
Раскопки показали:
Project1.dpr.71: fl := MyFloatTest(fl);
0041C544 FF35BC3E4200 push dword ptr [$00423ebc]
0041C54A E8E9D4FFFF call MyFloatTest
0041C54F D91DBC3E4200 fstp dword ptr [$00423ebc]
0041C555 9B wait
Мораль:
Нечего на версию пенять, если вместо float у меня(тебя) xz.
-
>NoUser
я же писал что дело не в float а в стрингах:
среди параметров были параметры не только числовые но и символьные, типа :
Params[12].Asstring := 'ddffdf';
Params[13].Asstring := 'ddffdf';
так вот, если этих строковых параметров больше 2-3 то и возникает ошибка!
а если их 2 или меньше, то все нормально!
-
>sniknik
замена string на widestring не помогла
и путаницы параметров нет при конвертации.
как только я уменьшаю количество параметров типа string до 2 , сразу ошибка пропадает.
-
оставь и не трогай.
-
> замена string на widestring не помогла
а может наоборот... оно и "ломает"? -> по умолчанию string стал юникодом т.е. увеличился размер в 2 раза (считая в байтах) - переполнился буфер, ну параметры тоже где то складываются...
т.е. в D7 у тебя уже было на грани переполнения, с юникодом переполнилось...
есть там AnsiString в параметрах?
-
>sniknik
вот это уже мне кажется ближе к истине.
в параметрах есть несколько string.
их было штук 5. я стал для эксперимента уменьшать их количество. как только оставляю строковых параметров 2 штуки-ошибка пропадает.
причем дело не в их значениях. я пробовал просто присваивать им в коде значение типа "qwerty". неужели это уж такой огромные размер?)
-
>sniknik
спасибо!!!!!!
помог Ваш последний совет.
после замены:
Params[13].Asstring := 'ddffdf';
на
Params[13].Asansistring := 'ddffdf';
ошибка исчезла.
неужели 3 несчастных параметра со стрингом вызывали переполнение буфера? их значение то было просто пару английских букв
-
> их значение то было просто пару английских букв
а зарезервированный под них размер? не думаю, что в рабочем буфере была упаковка данных по значениям.
-
ясно. еще раз большое спасибо
То есть в новых дельфях в процедурах лучше не использовать обычный стринг а юзать ансистринг.
-
я имею в виду конечно процедуры Storedproc
-
из палитры BDE