Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Ищу ошибку при работе с Extended / 4 сообщений из 4, страница 1 из 1
11.12.2014, 16:55
    #38831682
Ищу ошибку при работе с Extended
При работе старого приложения возникли проблемы с точностью Extended: "не хватает точности".

Выяснилось, что это случилось после подключения моего модуля (.dll), использующего Fib+.

Ковыряюсь.

После загрузке клиентской библиотеки Firebird (fbClient.dll) в Fib+ вызывается такой код:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
procedure InitFPU;
var
  Default8087CW: Word;
begin
  asm
    FSTCW Default8087CW
    OR Default8087CW, 0300h
    FLDCW Default8087CW
  end;
end;



А потом, после загрузки библиотеки, в процессе работы (перед обращением к методам fbclient.dll) сплошь и рядом - вызывается
Код: pascal
1.
   Set8087CW(Default8087CW);



Кроме того, в процессе работы я еще однократно загружаю fbclient.dll сам ( LoadLibrary(имя_файла) ), безо всяких инициализаций 8087, чтобы потом обратиться к fb_shutdown перед завершением работы моей .dll (т.к. используемый fbclient.dll - это у меня embedded 2.5 на самом деле со всеми вытекающими).
...

Всё... дальше мысли закончились... :(

Ткните, пожалуйста, в направлении блюдечка с молоком...
Спасибо.
...
Рейтинг: 0 / 0
11.12.2014, 17:16
    #38831735
kdv
kdv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ищу ошибку при работе с Extended
Адский тормоз,

Note that some DLLs change the FPU control word. You can call SysUtils.SafeLoadLibrary, which ensures that the FPU control word is restored to Default8087CW after loading the library.
...
Рейтинг: 0 / 0
11.12.2014, 17:25
    #38831752
Ищу ошибку при работе с Extended
kdvАдский тормоз,

Note that some DLLs change the FPU control word. You can call SysUtils.SafeLoadLibrary, which ensures that the FPU control word is restored to Default8087CW after loading the library.

Так что, простая загрузка fbclient (который fbembed).dll меняет FPU control word?

Сейчас попробую.
...
Рейтинг: 0 / 0
11.12.2014, 19:27
    #38831895
hvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ищу ошибку при работе с Extended
fbclient меняет флаг обработки floating-point exception, насколько я помню
точнее - включает его
клиент от 2.5 при каждом вызове API сохраняет FPU CW, ставит своё, потом восстанавливает
но, надо сказать, что это не потокобезопасно
лучше решения пока нет, да и пользователей имеющих из-за этого проблемы - 1-2 за всё время что я помню
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Ищу ошибку при работе с Extended / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]