|
Платформа 8.3.10.2561 +Delphi +V83.ComConnector = нет соединения | ☑ | ||
---|---|---|---|---|
0
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. |
|||
1
vicof
18.09.17
✎
16:43
|
Например, профили безопасности включили.
|
|||
2
vicof
18.09.17
✎
16:43
|
Техножурнал настроить и посмотреть
|
|||
3
Philix
18.09.17
✎
16:50
|
(0) Может разрядность сервера при апргрейде 1С? т.е. старая версия была 32 бита, а новая - 64?
|
|||
4
waik
18.09.17
✎
16:59
|
Про профили безопасности не слышал. Подключение под пользователем с максимальными правами.
В журнале ничего подозрительного не увидел. Разрядность как была 64 так и осталась. Попробуем копнуть в профилях пользователя - советуют посмотреть в сторону ограничения опасных функций, хз где это да и думаю не поможет - ошибка в момент соединения. Никаких действий ещё не выполнялось. //Инициализация системы 1Cv8 и получение ссылки на COM-объект Result := Result.Connect(InitLine); |
|||
5
v77
18.09.17
✎
17:04
|
Saved8087CW := Default8087CW;
Set8087CW($133f); ляля тополя Set8087CW(Saved8087CW); |
|||
6
v77
18.09.17
✎
17:06
|
короче это 8087CW должно быть как в 1С
|
|||
7
waik
18.09.17
✎
17:07
|
(5) ок. На весь сеанс меняется или на момент подключения?
|
|||
8
v77
18.09.17
✎
17:09
|
ну по логике на время работы с comcntr.dll
|
|||
9
waik
18.09.17
✎
17:17
|
(5) Вот блин... работает!!! Но как , Холмс?
Буду экспериментировать. Ставлю Set8087CW($133f) сразу при создании формы. Все работает... При закрытии возвращаю значение и сразу получаю тоже сообщение. Видимо Com ещё не освобожден к этому моменту.... Шайтанство... |
|||
10
v77
18.09.17
✎
17:27
|
(9) ну да. 1с долго выгружается вроде.
|
|||
11
H A D G E H O G s
18.09.17
✎
18:28
|
(9) Не выполняй
Set8087CW(Saved8087CW); после завершения работы с COM Дождись upload Comcntrl + 100500 связанных dll в окне Delphi и нажми кнопку, по которой выполни Set8087CW(Saved8087CW); Если все пойдет гладко - тебя ждут дальнейшие испытания |
|||
12
H A D G E H O G s
18.09.17
✎
18:29
|
Откуда взяли v83tlb ?
|
|||
13
H A D G E H O G s
18.09.17
✎
18:31
|
(5) Спасибо тебе, добрый человек. Хрен бы я когда вышел на эту тему, получая fpio при работе с COM
|
|||
14
v77
18.09.17
✎
19:24
|
(13) да эта тема древняя как и delphi. Еще с самых первых версий
|
|||
15
Филиал-msk
18.09.17
✎
19:35
|
Шел 21 век. 64-битные процессоры и программы вовсю использовали SSE для плавучки позрачно для компилятора и для пользователя. Создавались новые стандарты С++, возникали быстрые и могучие языки программирования со своими экосистемами.
Программисты на Delphi колупались с сохранением состояния fpu, поломанным еще во времена 8087. |
|||
16
v77
19.09.17
✎
07:20
|
(15) Ты просто не понимаешь о чем вообще речь, потому и написам херню. Бывает.
|
|||
17
Филиал-msk
19.09.17
✎
07:42
|
(16) Да где уж нам, сиволапотным, отошедшим от дельфи в тот момент, когда она еще ценилась за умение собирать 16 битный код под 3.11fwg. Приятно видеть, что с той поры под капотом ничего не поменялось. Стабильность, это здорово, держитесь там, коллеги!
|
|||
18
waik
19.09.17
✎
08:10
|
(11) Достаточно дождаться дисконекта - остальные 100500 библиотек не повлияли. Ошибка при закрытии ушла.
(12) В каком смысле где взял V83_TLB? Создал заново через Import Component - 1CV83 ComConnector Type Library -> v83_tlb.pas |
|||
19
v77
19.09.17
✎
08:47
|
(17) ну у C++ под капотом тоже ничего не поменялось. таковы стандарты.
|
|||
20
Филиал-msk
19.09.17
✎
14:27
|
(19) Тут дело в реализации дельфевого VCL и прочих потрохов. Тысячу лет тому назад было принято сильно неудачное архитектурное решение, что внутренняя работа библиотек зависит от значения изменяющегося процессорного состояния. Причем этот состояние может произвольно меняться снаружи. После, например,вызовов winapi - CreateWindowsEx и все такое. И вот до сих пор этот маразм тянется и тянется, что в общем-то говорит о востребованности и популярности языка с его экосистемой.
Остальные языки при проектировании своих библиотек как-то обошли эту особенность. |
|||
21
v77
19.09.17
✎
15:29
|
(20) да ладна. просто в разных компиляторах используют разные значения управляющего слова FPU и при каждом вызове функции из вне проверять не изменилось ли там чего в этом управляющем слове - задолбаешься. Никто не проверяет. Не трогать это управляющее слово или восстанавливать его значение, еcли поменял, - задача писателей dll. А CreateWindowsEx и прочее давно исправили ещё в Windows XP
|
|||
22
Провинциальный 1сник
19.09.17
✎
15:48
|
А что, в дельфи нельзя разве вообще отключить использование FPU? В досовском паскале можно было, он всю плавучку реализовывал библиотеками.
|
|||
23
v77
19.09.17
✎
15:50
|
(22) да можно. только нафига
|
|||
24
Провинциальный 1сник
19.09.17
✎
15:51
|
(23) Ну так это же должно убрать проблему, разве нет? А собственно плавучка для учетных задач никогда не была узким местом и на её быстродействие пофиг.
|
|||
25
v77
19.09.17
✎
16:02
|
(24) я думаю проблема не исчезнет
|
|||
26
v77
19.09.17
✎
16:03
|
проблема будет эмулироваться :)
|
|||
27
v77
19.09.17
✎
16:06
|
я бы оставил это слово FPU как в Си++ да и всё.
|
|||
28
v77
19.09.17
✎
16:07
|
хотя это Delphi ошибку генерит. пускай будет Set8087CW($133f);
|
|||
29
waik
19.09.17
✎
16:58
|
День отработал с этой доработкой. Клиентских соединений по COM создавалось до 10 одновременно, через них создано почти 6т. ОПЗС и простые запросы десятками тысяч. Подключаются/отключаются без проблем.
Спасибо за помощь v77! От холиваров лучше отказаться. :) |
|||
30
v77
19.09.17
✎
17:05
|
(29)может можно было обойтись просто try except? проигнорировать исключение и работать дальше
|
|||
31
waik
20.09.17
✎
08:00
|
(30) К сожалению нет. Ошибка выдавалась на строке Connect и соотвественно ссылки на COM программа не получала. Ну и далее без неё ничего не работало естественно. Это я сразу попробовал.
К тому же ошибка возвращается сразу же, при первом обращении к объекту, если восстановить значение CW. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |