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


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Отловить события com-объекта
Ответ #15 - 25. Июля 2008 :: 15:18
Печать  
Arta писал(а) 25. Июля 2008 :: 15:11:
Т.е. всю реализацию хотелось бы иметь внутри обычного 1cpp-шного класса.

Lua-класс не устроит?

Можно организовать так, чтобы вызовы методов переадресовывались COM-предку и события обрабатывать в этом же классе. Могу соорудить пример. Подкинь какой-нибудь COM с событиями, на котором можно попробовать.
  

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



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

Просто навигацию куда-нибудь и DocumentComplete + DownloadComplete
  
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Отловить события com-объекта
Ответ #17 - 26. Июля 2008 :: 22:17
Печать  
function MyIE()   --конструктор
   
local b=luacom.CreateObject('InternetExplorer.Application') --базовый класс
   
b.visible=true
    local
obj={    --наш класс
      
DocumentComplete=function(o, d,url--обработчик события
           
print(url)
      
end,
      
Go=function() b:Navigate('http://www.1cpp.ru') end  --метод наследника
   
}
   
local meta={  --метатаблица
      
__index = function(s,i--поиск свойства или метода
           
return rawget(s,i--ищем в нашем классе в обход метаметода
              
or b[i]    --если нету, ищем в базовом
      
end
   
}
   
setmetatable(obj,meta)
   
obj.__eventobj=luacom.ImplInterface(obj, 'InternetExplorer.Application', 'DWebBrowserEvents2')
   
luacom.addConnection(b, obj.__eventobj)
   
return obj
end

m = MyIE()
m:Navigate('http://ya.ru'--вызываем метод базового
m.Go()  --вызываем метод наследника

Итого дополнительного кода:
одна строка - явное создание экземпляра базового класса
шесть строк - реализация наследования
две строки - подписка на события
« Последняя редакция: 27. Июля 2008 :: 12:03 - steban »  

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



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


Степ, я тебя недопонял Печаль
Мне-то хочется иметь класс родной 1cpp-шный.

По приведенному тобой принципу я могу реализовать код в банальном vbs, там подписаться на события ком-объекта не составляет труда.
  
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Отловить события com-объекта
Ответ #19 - 27. Июля 2008 :: 10:40
Печать  
Arta писал(а) 26. Июля 2008 :: 22:50:
По приведенному тобой принципу я могу реализовать код в банальном vbs, там подписаться на события ком-объекта не составляет труда.

А унаследоваться?
  

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



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

Извратно. Подобие include.
  
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Отловить события com-объекта
Ответ #21 - 27. Июля 2008 :: 11:58
Печать  
Если на эту хотелку посмотреть несколько шире, а именно реализовать изменения прототипа произвольных объектов, то станет возможным некое подобие наследования от COM-объектов.
  

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



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Отловить события com-объекта
Ответ #22 - 27. Июля 2008 :: 14:57
Печать  
steban писал(а) 27. Июля 2008 :: 11:58:
Если на эту хотелку посмотреть несколько шире, а именно реализовать изменения прототипа произвольных объектов, то станет возможным некое подобие наследования от COM-объектов.

Ну это совсем уже круто будет Улыбка
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1 [2] 
ОтправитьПечать