Сейчас на форуме: -Sanchez- (+7 невидимых)

 eXeL@B —› Основной форум —› Inexact floating-point result
Посл.ответ Сообщение

Ранг: 329.6 (мудрец), 192thx
Активность: 0.140.01
Статус: Участник

Создано: 06 декабря 2016 09:11
· Личное сообщение · #1

Inexact floating-point result

Добавлено спустя 8 минут
Вопрос к знатокам!!!!
Столкнулся с такой проблемой. Имеется программа, написанная на VB5, и защищенная Obsidium. Протектор я снял достаточно легко, восстановил оригинальные секции файла, импорт. Под Windows XP программа нормально запускается без каких-либо проблем, и нормально работает. При попытке запуска программы под Windows 10 (без отладчика), она запускается, но при загрузке asycfilt.dll генерирует огромное количество исключений "Inexact floating-point result". Но при дальнейшей работе операционная система закрывает эту программу. При запуске же программы под отладчиком (OllyDbg 2.01), программа нормально работает, генерируя огромное количество исключений с выдачей сообщений в журнале LOG отладчика - Inexact floating-point result - passed to application. Как можно победить эту проблему???




Ранг: 192.7 (ветеран), 154thx
Активность: 0.070
Статус: Участник
The ONE

Создано: 06 декабря 2016 10:03
· Личное сообщение · #2

а не в этом ли дело?

-----
Сотрудник DHARMA




Ранг: 329.6 (мудрец), 192thx
Активность: 0.140.01
Статус: Участник

Создано: 06 декабря 2016 10:32
· Личное сообщение · #3

TrueLies

К сожалению - не помогло. Все также генерируется куча исключений...



Ранг: 58.3 (постоянный), 50thx
Активность: 0.040.08
Статус: Участник

Создано: 06 декабря 2016 10:40
· Личное сообщение · #4

Microsoft в msvbvm60.dll даже для 7-ки изменения делали, а уж msvbvm50.dll вряд ли кто-то трогал. Скорей всего дело в ней.
В таком случае только VM с XP и никаких проблем!



Ранг: 329.6 (мудрец), 192thx
Активность: 0.140.01
Статус: Участник

Создано: 06 декабря 2016 11:24
· Личное сообщение · #5

DrVB_5_6

На Windows XP в папку с программой я положил msvbvm60.dll, и программа прекрасно работает. А вот под Windows 10 она генерирует исключение. Можно, конечно, ставить виртуалку с XP, но это не является решением проблемы...




Ранг: 337.5 (мудрец), 348thx
Активность: 2.112.42
Статус: Участник

Создано: 06 декабря 2016 11:26
· Личное сообщение · #6

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

-----
vx




Ранг: 58.3 (постоянный), 50thx
Активность: 0.040.08
Статус: Участник

Создано: 06 декабря 2016 11:33
· Личное сообщение · #7

vnekrilov пишет:
На Windows XP в папку с программой я положил msvbvm60.dll, и программа прекрасно работает.

Да, но использует msvbvm50.dll (если это VB5), которая лежит где-то в стандартных местах. Или в импортах прописана msvbvm60.dll? Вообще-то они не совсем совпадают!!!



Ранг: 431.7 (мудрец), 389thx
Активность: 0.730.32
Статус: Участник

Создано: 06 декабря 2016 12:19 · Поправил: dosprog
· Личное сообщение · #8

То есть проблемы проявляются просто при запуске программы, даже если в неё не вводить никаких данных?

В посте #2 верно сказано, что библиотека работает с дурацкими настройками локализации в системе,
с этим уже бывали проблемы неоднократно. Причём побороть их системными настройками не удавалось, криво работает всё это хозяйство.

Если программа глючит без ввода данных, а уже при запуске, то могу предположить, что при старте там выполняются какие-то внутренние преобразования, условно говоря <sprintf()+sscanf()>, и в процессе sprintf() получается строка с десятичной точкой, тогда как sscanf() тут же ожидает десятичную запятую, и(или) наоборот.

Если всё дело действительно в этом несоответствии "точки" и "запятой" в sprintf() и sscanf(),
то тогда можно попробовать сделать врезку в вызов sprintf(), которая будет насильно менять в строке-результате её работы тупо все запятые на тупо точки. Тогда системные настройки "точка/запятая" будут касаться только sscanf() и всё это хозяйство кое-как заработает.
Хотя, конечно, это костыльное решение.

..ну, это "верхний уровень"..

--Добавлено--
А вот что пишут --> тут <--по этому поводу:

- The rounded result of an operation is not exact because a value is modified (rounded)
to fit in a receiver operand and nonzero fraction digits are lost.
- The occurrence of a floating-point overflow condition when that condition is masked
and the result is no longer exact because it is set to infinity.

.. Кстати, а программа запускается под разными системами на одной и той же машине?
- Если нет, то, может, попробовать на машине с Win10 (где программа глючит)
загрузить WinXP с флеш-карты и запустить программу под этой WinXP? ..




 eXeL@B —› Основной форум —› Inexact floating-point result
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати