Переключение на Главную Страницу Страницы: [1] 2  ОтправитьПечать
Горячая тема (более 10 ответов) Отловить события com-объекта (число прочтений - 9171 )
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Отловить события com-объекта
24. Сентября 2007 :: 21:51
Печать  
Конечно можно использовать eventproxy.dll и ule.dll. Но как обычно хочется "большой и светлой любви"...

Артур, а реально ли сделать так, чтобы я в defcls.prm прописал, что класс является наследником моего ком-объекта. Далее создаю этот класс, и в нем отлавливаю все его события по аналогии с activex или ТП?
Приходится в 1С реализовывать несвойственные ей функции как сканирование, работу с ssh/telnet или с ком-портами.

P.S. А может это и так работает, а я до сих пор торможу? Улыбка
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Отловить события com-объекта
Ответ #1 - 25. Сентября 2007 :: 04:52
Печать  
Наверное, сделать реально.
Но есть одна проблема - каким образом задать соответствие между ком-объектом и объектом-наследником?
Тут возможна проблема циклической/лишней ссылки на объект-наследник Печаль
А чем плох eventproxy.dll ?
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Отловить события com-объекта
Ответ #2 - 25. Сентября 2007 :: 07:59
Печать  
eventproxy отдает события в ОбработкаВнешнегоСобытия. А хочется сделать полноценный класс.
и я столкнулся что есть ком-объекты с которыми он не дружит.


Только меня заинтересовал такой момент. Если в событии в качестве параметра будет неподдерживаемый тип переменной, то получится ли реализовать?
  
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Отловить события com-объекта
Ответ #3 - 28. Сентября 2007 :: 07:43
Печать  
Думаю, что наследование от COM-классов сделать довольно трудоемко.
Предлагаю обойтись агрегированием.
Можно добавить в 1С++ класс - аналог eventProxy.
Добавить в этот класс метод УстановитьОбработчик, в который передавать КОП или ГруппповойКонтекст.
Потом пишешь КОП, в нем агрегируешь нужный тебе COM-объект (с ключевым словом "Экспорт") и агрегируешь обработчик.
В констукторе КОПа назначаешь обработчиком сам КОП и реализуешь собственно обработчики.
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Отловить события com-объекта
Ответ #4 - 28. Сентября 2007 :: 10:27
Печать  
Да, как вариант. Только 1СPP становится все запутаннее и запутанее для новичков Улыбка
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Отловить события com-объекта
Ответ #5 - 30. Сентября 2007 :: 09:50
Печать  
Arta писал(а) 28. Сентября 2007 :: 10:27:
Только 1СPP становится все запутаннее и запутанее для новичков Улыбка

С чего ты это взял?
Использование Оле, АктивИкс никогда вроде не было простым делом Улыбка
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Отловить события com-объекта
Ответ #6 - 01. Октября 2007 :: 08:19
Печать  
artbear писал(а) 30. Сентября 2007 :: 09:50:
С чего ты это взял?
Использование Оле, АктивИкс никогда вроде не было простым делом Улыбка


Артур, нередко нужно выполнить специфический метод, чтобы заработала необходимая фича.
Мне то все понятно, но думаю человеку с нуля не будет интуитивно понятны некоторые вещи. Перехватчик думаю как раз тот случай. Он не получает распостранения как раз из-за того что людям 1. кажется сложно 2. сперва кажется все запутаннным.

Это мое имхо. И не смотря на это я активно пользуюсь почти все функционалом.
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Отловить события com-объекта
Ответ #7 - 25. Июля 2008 :: 05:05
Печать  
Артем, твоя хотелка все еще нужна?
В принципе, для меня теперь вполне реально это сделать.

Пример теста КОМ-объекта с событиями, который есть в любой винде, можешь привести, чтобы я на нем потренировался.

ЗЫ кстати, заведен баг http://www.1cpp.ru/bugs/show_bug.cgi?id=3461
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Отловить события com-объекта
Ответ #8 - 25. Июля 2008 :: 06:32
Печать  
Конечно нужно. Еще как нужно.

Да попробуй тот же ADO. У него есть события


Или еще проще, попробуй банальный IE
Код
Выбрать все
objIE = WScript.CreateObject("InternetExplorer.Application")
objIE.Visible = -1
objIE.StatusBar = -1
objIE.Navigate url, 4 + 8 

  
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Отловить события com-объекта
Ответ #9 - 25. Июля 2008 :: 11:41
Печать  
2 artbear

Исходники EventProxy тебе в разборках не помогут?
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Отловить события com-объекта
Ответ #10 - 25. Июля 2008 :: 12:07
Печать  
Конечно, помогут Улыбка
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Отловить события com-объекта
Ответ #11 - 25. Июля 2008 :: 13:24
Печать  
Код
Выбрать все
ЗагрузитьВнешнююКомпоненту("v7lua.dll");
Луа=СоздатьОбъект("LuaRef");
Луа.dostring("
|ie=luacom.CreateObject('InternetExplorer.Application')
|ie.visible=true
|ПозволитьПереход=true
|
|event_sink = {}
|function event_sink:BeforeNavigate(url,flags,targframe,postdata,headers,cancel)
|	return nil,not ПозволитьПереход
|end
|function event_sink:NavigateComplete(url)
|	print(url)
|end
|event_obj=luacom.ImplInterface(event_sink, 'InternetExplorer.Application', 'DWebBrowserEvents')
|cookie=luacom.addConnection(ie, event_obj)
|
|ie:Navigate('http://www.1cpp.ru')
|");
 


Обработка событий происходит синхронно.
т.е. источник события дожидается окончания работы обработчика.
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Отловить события com-объекта
Ответ #12 - 25. Июля 2008 :: 14:32
Печать  
Степ, ну так и на vbs у меня сейчас работает. Для обработки событий ком-объектов это чуток не то...
  
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Отловить события com-объекта
Ответ #13 - 25. Июля 2008 :: 14:40
Печать  
Arta писал(а) 25. Июля 2008 :: 14:32:
Для обработки событий ком-объектов это чуток не то...

А как будет "то"?

Arta писал(а) 24. Сентября 2007 :: 21:51:
чтобы я в defcls.prm прописал, что класс является наследником моего ком-объекта. Далее создаю этот класс, и в нем отлавливаю все его события по аналогии с activex или ТП?


только так? Или примешь другой интерфейс?
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Отловить события com-объекта
Ответ #14 - 25. Июля 2008 :: 15:11
Печать  
steban писал(а) 25. Июля 2008 :: 14:40:
только так? Или примешь другой интерфейс?

Очень хочется получить наследника с событиями внутри.

Т.е. всю реализацию хотелось бы иметь внутри обычного 1cpp-шного класса. Через вешние языки (vbs, js) работает у меня и сейчас.
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 
ОтправитьПечать