Как подключиться к уже существующему OLE-объекту? #720696


#0 by Гений 1С
Есть задача - создать OLE-объект, чтобы можно было подключиться к нему из другого приложения. Допустим, для этого я могу заранее запустить его с неким GUID, или просто получить от него GUID. Т.е. можно ли подключиться к OLE-объекту, если он создан не из текущего приложения, а его идентификатор, допустим у нас есть (вопрос как получить этот идентификатор тоже актуален)
#1 by Torquader
Можно, RunObjectTable тебе в помощь. И GetObject в VbScript.
#2 by DrZombi
А поконкретней можно? В деталях. Приложение такое то подключается туда-то
#3 by Гений 1С
проблема в том, что IE9 глючит при его создании из 1С. Я создам IE9 (internetExplorer.Application) из скрипта. А потом подключусь из 1С. Дело в том, что из скрипта нормально работает, не глючит. GetObject разве подключится к существующему ком-объекту? а как работать с RunObjectTable?
#4 by Torquader
IE как раз в RunObjectTable не регистрируется. Если хочется его "создать", то запускай с ключом -embedded и подключайся, как обычно - у меня в 7.7 именно так и сделано, иначе - ну не стартует иногда эта "длинноухая шняга".
#5 by Гений 1С
мне нужно, чтобы он запустился не из одного потока с 1С, а с другого потока,если стартует в потоке 1С, то глючит.
#6 by Кирпич
моя многолетняя программерская практика подсказывает мне, что глючит обычно по вине самого жалующегося на глючность. покажи код и тебе скажут, почему у тебя глючит.
#7 by Гений 1С
мой опыт (и поиск в гугле) подсказывает мне что это корявая работа 1С с COM. методы и свойства объекта BODY выдают ошибку. т.е. это ошибка COM-модели. Я захожу на сайт, прошу Body.InnerHTML, а он мне выдает ошибку. но не всегда, иногда работает, иногда нет. Только с IE9, до этого нормально работает код. На IE8 ок. но у меня дома IE9, т.к. на Win8 более ранний использовать нельзя.
#8 by Кирпич
ну если с ie8 нормально работает, то причем тут 1с?
#9 by Гений 1С
ха. я гуглил на эту тему, нашел что 1С криво работает с COM, т.е. конкретно с новой версией IE9
#10 by Гений 1С
поэтому я и хочу обойти эту проблему, запуская IE в отдельном потоке, не связанным с 1С, а ему передавать только вызовы методов
#11 by Кирпич
Думаешь, что COM сильно изменился с приходом IE9? Я думаю нет.
#12 by Кирпич
Лучше посмотри настройки IE9. Безопасность там всякую, сертификаты и прочее.
#13 by Torquader
Enternet Explorer - это: 1) SingleInstance - то есть создаётся один объект на одного запрашивающего и повторные подключения к объекту не предусмотрены. Получить объект InternetExplorer через GetObject невозможно. 2) LocalServer32, то есть отдельное приложение и работает всегда в своём процессе, а все вызовы OLE идут через RemoteProcedureCall и очередь сообщений самого InternetExplorer. В одном потоке с 1С можно запустить только Proxy для OLE-обмена, а она стандартная для всех OLE-объектов. Если хочется извращаться - создай сценарий VbScript и вызывай его из 1С через MSScriptControl, а уже из этого сценария создавай "Осла".
#14 by Torquader
Если Body.innerHTML выдаёт ошибку, то нужно проверить, а есть ли страница, то есть сначала нужно дождаться готовности InternetExplorerOle.Busy должна возвращать False, только после этого к нему можно лезть - не забывайте, что он работает в отдельном процессе и никак не связан с вашим сценарием, и если вы ему дали команду, то выполняться она может начать даже после того, как вам ответили, что она успешная.
#15 by Гений 1С
Я так пробовал. Я даже пробовал запускать отдельное 1С через OLE.APPLICATION, а уже из него запускать IE. Суть проблемы такова - какое-то время IE9 из первичной 1С работает, потом что-то ломается в OLE и уже ничего не помогает - ни создание IE в скрипте, ни создание IE в новой 1С. Пока не перезапустишь первичную 1С.
#16 by Гений 1С
прикол в том, что InternetExplorerOle.Busy = false, а ожидаемые свойства не читаются, выдая ошибку с каким-то там кодом, счас его не помню. Погуглив этот код, нашел, что это какая-то несовместимость 1с с IE9.
#17 by Гений 1С
там я уже все перепробовал. причем безопасность к тому, что свойтво BODY выдает ошибку? это какая-то ошибка COM.
#18 by Torquader
Если сначала читает, а потом - нет, то это ошибка фрагментации памяти. Фрагмент всего тела передаётся из одного объекта в другой посредством WM_COPYMEMORY, но у приёмника может просто не найтись свободного пространства в памяти. Пробуйте копировать по-частям, то есть через перечисление вложенных в BODY объектов. Вариант 2 - написать VbScript, который будет не только "осла" по OLE "дёргать", но и саму 1С через Внешнее соединение.
#19 by Гений 1С
Я не копирую, я просто обращаюсь к свойствам и методам IE. ну вариант со скриптом, который дергает 1С, кстати, возможен. т.е. управляться будет не IE по COM, а 1C, которая управляет ослом. и если 1С падает, то будет перезапущена. 1С в таком режиме надо запускать по COM, наверное, для скорости. ОК, подумаю в этом направлении.
#20 by Кирпич
Офигенно вы проблемы решаете. Код не смотрели. Какую ошибку выдает IE им даже не интересно. Зато смело предположили, что 1с неправильно работает с COM и тут же, поверив в это, начали выдумывать какие то костыли. Снимаю шляпу. :)
#21 by Serginio1
Наверное лучше обойтись без IE
#22 by Гений 1С
в моем случае нужен IE, я не парсингом занимаюсь, а длительной сессией. причина не лечится, нужен обходной маневр.
#23 by Кирпич
и в чем причина? я вот думаю, что причина скорее всего в том, что IE просто не загрузил страницу. код покажи.
#24 by Serginio1
Посмотри
#25 by Гений 1С
Тогда бы не работало под IE8 Причина именно в браузере. мне нужно сессии поддерживать, а не просто GET и POST делать, т.е. полностью эмулировать работу браузера от входа до поста и перехода по последующим страницам. Код? Пожалуйста. Часто проваливается в неадекватное состояние.
#26 by Serginio1
Так  GET и POST и держит твою сессию через . Просто ты интерактивно работать не можешь. Кстати а какого нибудь activex microsoft web browser нет?
#27 by Кирпич
в коде ничо не понял, но если 1с будет вычислять все условия в этом выражении, то наверное будет глюк Если Браузер.readyState = 4  И Браузер.Document.body <> Неопределено и Браузер.Document.body.readystate = "complete" и Браузер.Document.readystate = "complete" Тогда
#28 by Кирпич
+ я бы написал так             Если Браузер.readyState = 4  Тогда Если Браузер.Document.body <> Неопределено Тогда Если Браузер.Document.body.readystate = "complete" и Браузер.Document.readystate = "complete" Тогда ...
#29 by Кирпич
Хотя нет. 1с вычисляет в принципе правильно. Проверил.
#30 by Гений 1С
не ищи траблов там, где их нет. Проблема в IE9. соответственно нельзя использовать такие шняги, как CLICK и прочие вкусности JAVA-SCRIPT. Некоторые сайты без JAVA-SCRIPT тупо не работают.
#31 by Гений 1С
ACTIVEX есть, но он работает через тот же IE9, например полеHTMLдокумента
#32 by Serginio1
Попробуй
#33 by Serginio1
#34 by Torquader
Попробуйте в Ie9 отключить вкладки - там с ними действительно какие-то проблемы были. Ну и нужно перед проверкой readyState всё-таки проверять Busy, чтобы не попасть в просак или куда-то ещё.
#35 by Гений 1С
и как его заюзать из 1S? это ж плагин к фирефоксу с вкладками это идея, хотя конечно из области плясок с бубнами. А насчет проверки редистейт не надо, попытка-исключение животворящая все это обходит.
#36 by Кирпич
просто, единственные траблы, которые у меня были с IE это busy и readyState вот мне и подозрительно, что всё дело в писанине
#37 by Гений 1С
ну ты просто мало гонял IE. А я его гонял огого сколько. у IE тут монополия - больше никакой браузер программно не управляется, к сожалению.
#38 by Serginio1
Из 1С ты можешь достучаться к любым классам Net watin в Основном к IE -
#39 by Гений 1С
ну хоть что-то, хотя и сложно. да.
#40 by Torquader
Вообще-то, есть ServerXMLHttpRequest и его методы SetRequestHeader, позволяющие устанавливать любые ключи (cookies), если это нужно. В IE самое удобное - это интерфейс, а не его работа в сети. Кстати, у меня "осёл" рулится из VbScript и проблемы возникают, если вызываешь метод, который выполняется дольше определённого времени, тогда в подсистеме OLE возникает TimeOut и управление прекращается - но это обычно случается, когда получаешь событие от "осла" и долго не отдаёшь ему управление.
#41 by Serginio1
Разве, что то может быть сложного для Гения? .Net значительно мощнее скриптов. Можешь использовать события в 8 ке без ВК. Куча наработок исходного кода итд. Сейчас уже без .Net уже тяжело жить
#42 by Torquader
Насколько я помню, события в восьмёрке и без Net прекрасно ловятся - от того же Word-а, например.
#43 by Serginio1
Они для этого и предназначены. Просто в реализована поддержка нетовских событий через оболочку для передачи в восьмерку. Я про то, что использованте нетовских сборок значительно мощнее скриптов
#44 by DES
Ну как, получилось подключиться ?
#45 by vis_tmp
Его забанили уже.... Не узнам
#46 by TormozIT
Отправлял в 1С несколько проблем в работе с ActiveX IE9. Их все воспроизвели и прислали ответ в стиле "это проблема ActiveX IE9". Так что подтверждаю наличие как минимум несовместимости 1С и IE9.
#47 by Torquader
Так IE9 и не только с 1С криво работает. После его выхода вместо работы с mshta.exe просто хочется плюнуть в экран, так как бывают всяческие чудеса. Слава богу, что пятый и шестой не подводят.
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С