Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.07.2018, 20:49   #1
srjfrl
Новичок
Джуниор
 
Регистрация: 27.07.2018
Сообщений: 2
Вопрос JvRichEdit ошибка при вставке OLE-объекта (doc файл), начиная с Win10 1803

Добрый день, уважаемые форумчане!

Имеем it-проект, работающий с БД. Для объектов одной из его подсистем требуется, чтобы пользователь имел возможность привязывать сопроводительную документацию в формате doc MS Word.
Ранее было принято решение использовать компонент JvRichEdit (из JEDI VCL). В нем реализована поддержка вставки OLE-объектов, в частности документов MS Word. В результате без проблем вставлялись doc-файлы любой сложности и сохранялись в нашу БД, при этом их без проблем можно было распечатать, используя компонент frxRichView из генератора отчетов FastReport.

Но начиная с Win 10 версия 1803, при вызове JvRichEdit.Lines.SaveToStream(ms) возникает ошибка (SaveToStream используем, чтобы потом полученный ms: TMemoryStream сохранить в БД). При этом вставка doc-документа, т.е. вызов JvRichEdit.InsertObjectDialog, проходит и сейчас нормально и doc-документ вставляет нормально.
Ошибка при вызове JvRichEdit.Lines.SaveToStream(ms) такая:
сначала выскакивает Invalid floating point operation, затем access violation at address 73AD75E1 in module 'RICHED20.dll'

Начали копаться в JvRichEdit.pas - ошибку вызывает вызов SendMessage(FRichEdit.Handle, EM_STREAMOUT, TextType, LPARAM(@EditStream)) в методе TJvRichEditStrings.DoExport;

Есть подозрение, что в Microsoft что-то намудрили с библиотекой RichEd20.dll в новой версии Win10. Во всех предыдущих версиях Windows даже в более ранней Win10 - код работает нормально.

Что можете посоветовать, как быть?

Заранее спасибо!
srjfrl вне форума Ответить с цитированием
Старый 04.08.2018, 12:18   #2
Vapaamies
Ваш К. О.
Участник клуба
 
Аватар для Vapaamies
 
Регистрация: 26.12.2012
Сообщений: 1,755
По умолчанию

С высокой вероятностью есть предположение, что каким-то образом нужно сохранять контрольное слово сопроцессора перед вставкой объекта OLE и восстанавливать после. Лучше в блоке try-finally.

Если никаких точных вычислений в программе не выполняется и тип Extended не используется (может неявно использоваться RTL), можно поставить умолчательное контрольное слово сопроцессора, совместимое с Windows.

Функции Get8087CW/Set8087CW.
Vapaamies вне форума Ответить с цитированием
Старый 06.08.2018, 11:29   #3
srjfrl
Новичок
Джуниор
 
Регистрация: 27.07.2018
Сообщений: 2
Вопрос

Цитата:
Сообщение от Vapaamies Посмотреть сообщение
С высокой вероятностью есть предположение, что каким-то образом нужно сохранять контрольное слово сопроцессора перед вставкой объекта OLE и восстанавливать после. Лучше в блоке try-finally.
...
Функции Get8087CW/Set8087CW.
Спасибо. Так?:

Код:
SavedCW := Get8087CW;
try
  Set8087CW(SavedCW or $7);
  ...
  RichEdit.Lines.SaveToStream(ms);
  ...
finally
  Set8087CW(SavedCW);
end;

Последний раз редактировалось srjfrl; 06.08.2018 в 15:59.
srjfrl вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вылетает ошибка при вставке в таблицу через Insert (ex. Что здесь не так ) pavel0088 SQL, базы данных 9 02.02.2013 07:15
Ошибка при вставке записи Ericnex БД в Delphi 11 16.08.2012 12:58
Ошибка при вставке изображения в Joomla 2.5 Умагаджи WordPress и другие CMS 1 09.07.2012 10:32
OLE = MSWord.doc tolikman Microsoft Office Access 1 23.12.2008 11:43
При открытие в OpenDialog .doc-вский файл должен отображаться в RichEdit. doc to rtf Lemon Компоненты Delphi 9 07.06.2007 19:19