Вход | Регистрация


1С:Предприятие ::

Метки: 

Платформа 8.3.10.2561 +Delphi +V83.ComConnector = нет соединения

Я
   waik
 
18.09.17 - 16:39
Доброго дня!
Сменили платформу на 8.3.10.2561 и перестал соединятся COMConnector.

При первой попытке соединения:
Project Project1.exe raised exception class $C0000090 with message 'floating point invalid operation at 0x1a8381a6'.

если повторить попытку, не закрывая приложения, то просто виснет.

На предыдущей платформе и всех ранее стоявших никаких проблем с этим не было.
1. Библиотека comcntr.dll регистрировалась заново после установки платформы - удачно.
2. Соединение из Delphi прописано и через V83_TLB (CreateComObject(ClassID) as IV8COMConnector;)  и через CreateOleObject('V83.COMConnector') - результат одинаковый.
3. Соединение на этой же машине в С# устанавливается. В 1С соединение из базы к базе устанавливается.

Что такое могло случиться с COM и как это возможно победить? Пока возвращаем платформу 8.3.9.1818.
 
  Рекламное место пустует
   vicof
 
1 - 18.09.17 - 16:43
Например, профили безопасности включили.
   vicof
 
2 - 18.09.17 - 16:43
Техножурнал настроить и посмотреть
   Philix
 
3 - 18.09.17 - 16:50
(0) Может разрядность сервера при апргрейде 1С? т.е. старая версия была 32 бита, а новая - 64?
   waik
 
4 - 18.09.17 - 16:59
Про профили безопасности не слышал. Подключение под пользователем с максимальными правами.  

В журнале ничего подозрительного не увидел.

Разрядность как была 64 так и осталась.


Попробуем копнуть в профилях пользователя - советуют посмотреть в сторону ограничения опасных функций, хз где это  да и думаю не поможет - ошибка в момент соединения. Никаких действий ещё не выполнялось.

//Инициализация системы 1Cv8 и получение ссылки на COM-объект

      Result := Result.Connect(InitLine);
   v77
 
5 - 18.09.17 - 17:04
Saved8087CW := Default8087CW; 
Set8087CW($133f);

ляля тополя

Set8087CW(Saved8087CW);
   v77
 
6 - 18.09.17 - 17:06
короче это 8087CW должно быть как в 1С
   waik
 
7 - 18.09.17 - 17:07
(5) ок.  На весь сеанс меняется или на момент подключения?
   v77
 
8 - 18.09.17 - 17:09
ну по логике на время работы с comcntr.dll
   waik
 
9 - 18.09.17 - 17:17
(5) Вот блин... работает!!!  Но как , Холмс?

Буду экспериментировать. Ставлю Set8087CW($133f) сразу при создании формы.  Все работает...  При закрытии возвращаю значение  и сразу получаю тоже сообщение. Видимо Com ещё не освобожден к этому моменту.... Шайтанство...
   v77
 
10 - 18.09.17 - 17:27
(9) ну да. 1с долго выгружается вроде.
 
  Рекламное место пустует
   H A D G E H O G s
 
11 - 18.09.17 - 18:28
(9) Не выполняй
Set8087CW(Saved8087CW);
после завершения работы с COM
Дождись upload Comcntrl + 100500 связанных dll в окне Delphi и нажми кнопку, по которой выполни
Set8087CW(Saved8087CW);

Если все пойдет гладко - тебя ждут дальнейшие испытания
   H A D G E H O G s
 
12 - 18.09.17 - 18:29
Откуда взяли v83tlb ?
   H A D G E H O G s
 
13 - 18.09.17 - 18:31
(5) Спасибо тебе, добрый человек. Хрен бы я когда вышел на эту тему, получая fpio при работе с COM
   v77
 
14 - 18.09.17 - 19:24
(13) да эта тема древняя как и delphi. Еще с самых первых версий
   Филиал-msk
 
15 - 18.09.17 - 19:35
Шел 21 век. 64-битные процессоры и программы вовсю использовали SSE для плавучки позрачно для компилятора и для пользователя. Создавались новые стандарты С++, возникали быстрые и могучие языки программирования со своими экосистемами.
Программисты на Delphi колупались с сохранением состояния fpu, поломанным еще во времена 8087.
   v77
 
16 - 19.09.17 - 07:20
(15) Ты просто не понимаешь о чем вообще речь, потому и написам херню. Бывает.
   Филиал-msk
 
17 - 19.09.17 - 07:42
(16) Да где уж нам, сиволапотным, отошедшим от дельфи в тот момент, когда она еще ценилась за умение собирать 16 битный код под 3.11fwg. Приятно видеть, что с той поры под капотом ничего не поменялось. Стабильность, это здорово, держитесь там, коллеги!
   waik
 
18 - 19.09.17 - 08:10
(11) Достаточно дождаться дисконекта - остальные 100500 библиотек не повлияли. Ошибка при закрытии ушла.

(12) В каком смысле где взял V83_TLB? Создал заново через Import Component - 1CV83 ComConnector Type Library -> v83_tlb.pas
   v77
 
19 - 19.09.17 - 08:47
(17) ну у C++ под капотом тоже ничего не поменялось. таковы стандарты.
   Филиал-msk
 
20 - 19.09.17 - 14:27
(19) Тут дело в реализации дельфевого VCL и прочих потрохов. Тысячу лет тому назад было принято сильно неудачное архитектурное решение, что внутренняя работа библиотек зависит от значения изменяющегося процессорного состояния. Причем этот состояние  может  произвольно меняться снаружи. После, например,вызовов winapi - CreateWindowsEx и все такое. И вот до сих пор этот маразм тянется и тянется, что в общем-то говорит о востребованности и популярности языка с его экосистемой.

Остальные языки при проектировании своих библиотек как-то обошли эту особенность.
   v77
 
21 - 19.09.17 - 15:29
(20) да ладна. просто в разных компиляторах используют разные значения управляющего слова FPU и при каждом вызове функции из вне проверять не изменилось ли там чего в этом управляющем слове - задолбаешься. Никто не проверяет. Не трогать это управляющее слово или восстанавливать его значение, еcли поменял, - задача писателей dll. А CreateWindowsEx и прочее давно исправили ещё в Windows XP
   Провинциальный 1сник
 
22 - 19.09.17 - 15:48
А что, в дельфи нельзя разве вообще отключить использование FPU? В досовском паскале можно было, он всю плавучку реализовывал библиотеками.
   v77
 
23 - 19.09.17 - 15:50
(22) да можно. только нафига
   Провинциальный 1сник
 
24 - 19.09.17 - 15:51
(23) Ну так это же должно убрать проблему, разве нет? А собственно плавучка для учетных задач никогда не была узким местом и на её быстродействие пофиг.
   v77
 
25 - 19.09.17 - 16:02
(24) я думаю проблема не исчезнет
   v77
 
26 - 19.09.17 - 16:03
проблема будет эмулироваться :)
   v77
 
27 - 19.09.17 - 16:06
я бы оставил это слово FPU как в Си++ да и всё.
   v77
 
28 - 19.09.17 - 16:07
хотя это Delphi ошибку генерит. пускай будет Set8087CW($133f);
   waik
 
29 - 19.09.17 - 16:58
День отработал с этой доработкой. Клиентских соединений по  COM создавалось до 10 одновременно, через них создано  почти 6т. ОПЗС и простые запросы десятками тысяч. Подключаются/отключаются без проблем.

Спасибо за помощь v77!

От холиваров лучше отказаться. :)
   v77
 
30 - 19.09.17 - 17:05
(29)может можно было обойтись просто try except? проигнорировать исключение и работать дальше
   waik
 
31 - 20.09.17 - 08:00
(30) К сожалению нет. Ошибка выдавалась на строке Connect  и соотвественно ссылки на COM программа не получала. Ну и далее без неё ничего не работало естественно. Это я сразу попробовал.
К тому же ошибка возвращается сразу же, при первом обращении к объекту, если восстановить значение CW.



Список тем форума
  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует