![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| EKoshelev |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 509 Регистрация: 1.9.2004 Репутация: нет Всего: нет |
История такая. Получаю пакеты с железки одной и разбираю их, т. е. осуществляю парсинг, если по-научному. Как правило, все извлекаемые значения целые, однако, тут стали попадаться задачи, в которых надо доставать дробные. А для дробных, если я правильно понимаю, не любая комбинация байтов является правильной, что ли, не знаю как сказать. Короче, на вот такой строке
MoveMemory(@SingleVal, @Buffer[Address], sizeof(Single)); Возникает ошибка: "Project ProjectName.exe raised exception class EInvalidOp with message 'Invalid floating point operation'. Process stopped. Use Step or Run to continue." Можно ли перед тем как срисовать байты из буфера в переменную проверить их на корректность? Или хотя бы просто сделать так, чтобы он не орал? Для последнего случая вроде как есть стандартные подходы, но я их к своему стыду не знаю (хотя, первое предпочтительнее). Или может просто линк дадите на гдепочитать. Заранее спасибо. -------------------- Вежливым и адекватным предлагаю общаться на "ты". |
|||
|
||||
| bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 31 Всего: 88 |
мне крайне сомнительно чтобы именно эта строчка кидала этот эксцепшн. проверь предыдущую
-------------------- Обижено школьников: 8 |
|||
|
||||
| EKoshelev |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 509 Регистрация: 1.9.2004 Репутация: нет Всего: нет |
Предыдущая - условие, которое не срабатывает (в данном случае)
if FDataTypes[ItmIdx] <> dt8Bytes then ... else MoveMemory(@SingleVal... Полагаю, что именно на ней. Раньше уже сталкивался с такими ошибками. Кстати, я приврал, что не знаю как эксепшены обрабатывать. Но этот подход не нравится, т. к. эксепшн обрабатывается, а COM-соединение глохнет почему-то. Приходится переподключать. А вот если бы была возможность не совершать действий, которые вызывают этот эксепшн, то было бы совсем хорошо. Это сообщение отредактировал(а) EKoshelev - 19.12.2014, 10:48 -------------------- Вежливым и адекватным предлагаю общаться на "ты". |
|||
|
||||
| EKoshelev |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 509 Регистрация: 1.9.2004 Репутация: нет Всего: нет |
А чё-то я уже и не знаю. То есть ошибка-то стопудово на той строке. Просто вещи не очень понятные.
В обработку эксепшена добавил вывод того куска памяти, при преобразовании которого в Single вылетает ошибка: 0, 0, 0, 11 Написал прожку:
она такой ошибки не вызывает. -------------------- Вежливым и адекватным предлагаю общаться на "ты". |
|||
|
||||
| bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 31 Всего: 88 |
контролировать генерацию эксцепшнов операциями с числами с плавающей запятой можно при помощи SetExceptionMask
но я тебе еще раз говорю, что само по себе копирование в данных в область памяти занятую переменной вещественного типа не должно давать исключения. сделай чтоли минимальный пример на котором воспроизводится проблема -------------------- Обижено школьников: 8 |
|||
|
||||
| EKoshelev |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 509 Регистрация: 1.9.2004 Репутация: нет Всего: нет |
bems, ну я в общем написал уже (выше).
-------------------- Вежливым и адекватным предлагаю общаться на "ты". |
|||
|
||||
| EKoshelev |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 509 Регистрация: 1.9.2004 Репутация: нет Всего: нет |
Короче, зря я эту тему создал.
Закомментил весь код этой процедуры. В конце оставил result := 0; И всё равно выкидывает тот же самый эксепшн. -------------------- Вежливым и адекватным предлагаю общаться на "ты". |
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |