Переключение на Главную Страницу Страницы: 1 ... 3 4 [5]  ОтправитьПечать
Очень популярная тема (более 25 ответов) ВК для асинхронной обработки событий COM-объектов. (число прочтений - 62936 )
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ВК для асинхронной обработки событий COM-объек
Ответ #60 - 20. Марта 2008 :: 18:15
Печать  
steban писал(а) 17. Марта 2008 :: 13:34:
Добавлена поддержка объектов, не реализующих IProvideClassInfo.


Степ, какие именно события IE можно будет ловить? DocumentComplete, DownloadComplete и т.д.? Или я не о том?
  
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ВК для асинхронной обработки событий COM-объек
Ответ #61 - 20. Марта 2008 :: 19:34
Печать  
Arta писал(а) 20. Марта 2008 :: 18:15:
какие именно события IE можно будет ловить?

все
  

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



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ВК для асинхронной обработки событий COM-объек
Ответ #62 - 21. Марта 2008 :: 09:13
Печать  
steban писал(а) 20. Марта 2008 :: 19:34:
Arta писал(а) 20. Марта 2008 :: 18:15:
какие именно события IE можно будет ловить?

все

События джава-скрипта же не отловишь Улыбка Поэтому и спросил Улыбка
Ясно. Сенкс!
  
Наверх
 
IP записан
 
Enterprise Integrator
YaBB Newbies
*
Отсутствует


Мы стираем границы для
разработчиков

Сообщений: 6
Местоположение: Санкт-Петербург
Зарегистрирован: 15. Апреля 2008
Пол: Мужской
Re: ВК для асинхронной обработки событий COM-объек
Ответ #63 - 08. Июля 2008 :: 10:35
Печать  
А как использовать с ADODB.Connection?
           
Код
Выбрать все
ОбработчикСобытий=Новый ("Addin.EventProxy");
ОбработчикСобытий.ГлубинаБуфераСобытий=200;
Обработчик= Новый COMОбъект("ADODB.Connection");
Обработчик.ConnectionString = СтрокаПодключения;
Обработчик.ConnectionTimeout=0;
Обработчик.CursorLocation=3;
Обработчик.Open();
ОбработчикСобытий.Источник(Обработчик,"ADODB.Connection","ADO");
АсинхронныйОбъект=ОбработчикСобытий.ПолучитьОбъект(" ");  



Что передать в функцию ПолучитьОбъект чтобы вернуть объект?
  
Наверх
wwwGTalk  
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ВК для асинхронной обработки событий COM-объек
Ответ #64 - 08. Июля 2008 :: 11:16
Печать  
После вызова "Источник" настройка обработчика закончена.
Обработка событий происходит в процедуре ОбработкаВнешнегоСобытия.

Код
Выбрать все
Процедура ОбработкаВнешнегоСобытия(Источник, Событие, Данные)
	Если Источник="ADO" Тогда
		Д=ЗначениеИзСтрокиВнутр(Данные);
		Если Событие="Disconnect" Тогда
			adStatus=Д.ПолучитьЗначение(1);
			pConnection=ОбработчикСобытий.ПолучитьОбъект(Д.ПолучитьЗначение(2));
			//что-то с этим делаем :)
		ИначеЕсли Событие="ExecuteComplete" Тогда
			//......................
		КонецЕсли;
КонецПроцедуры	// ОбработкаВнешнегоСобытия
 

  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
Enterprise Integrator
YaBB Newbies
*
Отсутствует


Мы стираем границы для
разработчиков

Сообщений: 6
Местоположение: Санкт-Петербург
Зарегистрирован: 15. Апреля 2008
Пол: Мужской
Re: ВК для асинхронной обработки событий COM-объек
Ответ #65 - 09. Июля 2008 :: 17:37
Печать  
Пытаюсь взлететь на 8.1

В данных по событию "ConnectComplete" получаю след строку  Ужас
{"S","0","0","0","0","0","???"},""}}}

В 8 список значений
Код
Выбрать все
ЗначениеВСтрокуВнутр(Новый СписокЗначение())="{""#"",4772b3b4-f4a3-49c0-a1a5-8cb5961511a3,
|{3,1e512aab-1b41-4ef6-9375-f0137be9dd91,0,0,
|{0},
|{""Pattern""}
|}
|}" 



Соотвественно ЗначениеИзСтрокиВнутр(Данные) всегда возвращает неопределенно.
Как всетаки получить объект ?

И примера метода Сериализовать тоже нигде не нашел
  
Наверх
wwwGTalk  
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ВК для асинхронной обработки событий COM-объек
Ответ #66 - 09. Июля 2008 :: 17:48
Печать  
Цитата:
ЗначениеИзСтрокиВнутр(Данные) всегда возвращает неопределенно

Ну да, логично.
Формат сериализации рассчитан на 7.7.
Доработаю.
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
Enterprise Integrator
YaBB Newbies
*
Отсутствует


Мы стираем границы для
разработчиков

Сообщений: 6
Местоположение: Санкт-Петербург
Зарегистрирован: 15. Апреля 2008
Пол: Мужской
Re: ВК для асинхронной обработки событий COM-объек
Ответ #67 - 09. Июля 2008 :: 17:51
Печать  
Класс C нетерпением жду.
  
Наверх
wwwGTalk  
IP записан
 
Enterprise Integrator
YaBB Newbies
*
Отсутствует


Мы стираем границы для
разработчиков

Сообщений: 6
Местоположение: Санкт-Петербург
Зарегистрирован: 15. Апреля 2008
Пол: Мужской
Re: ВК для асинхронной обработки событий COM-объек
Ответ #68 - 10. Июля 2008 :: 07:23
Печать  
В 8.1 реализованы замечательные вещи связанные с фоновыми процессами. Однако их использование довольно осложнено тем что, при завершении фонового задания выполняемого на сервере клиент никак не узнает, что фоновое задание завершено, пока не обратиться к менеджеру фоновых заданий, а конструкция ОбработкаОповещения на сервере не работает. Таки образом повсеместное применение фоновых процессов осложнено.  Может конечно не очень по адресу .. но тема соотвествует  Подмигивание.

Можно осуществить подписку с помошью Вашей ВК на фоновое здание, и в случае его завершения генерировалось бы внешенее событие,  о завершении фонового процесса с таким то ключом?
  
Наверх
wwwGTalk  
IP записан
 
Scruoge
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 1
Зарегистрирован: 29. Января 2009
Re: ВК для асинхронной обработки событий COM-объектов.
Ответ #69 - 29. Января 2009 :: 20:23
Печать  
Код
Выбрать все
перем ИсточникСобытий, ОбработчикСобытий;

Процедура ПриОткрытии()
	ЗагрузитьВнешнююКомпоненту("EventProxy.dll");
	ОбработчикСобытий = СоздатьОбъект("Addin.EventProxy");
	ОбработчикСобытий.ГлубинаБуфераСобытий = 200;
	ИсточникСобытий = СоздатьОбъект("MyProxyServer.MyProxy");
	ОбработчикСобытий.Источник(ИсточникСобытий, "MyProxyServer.MyProxy", "Proxy");
КонецПроцедуры	// ПриОткрытии

Процедура ОбработкаВнешнегоСобытия(Источник, Событие, Данные)
	Сообщить(Источник + ": " + Событие + "('" + Данные + "')");
КонецПроцедуры
 



Вот этот код. Валится на вызове ОбработчикСобытий.Источник(...)
Ошибка при выполнении метода объекта компоненты EventProxy.dll

Мой объект создавался в Builder 2007 c помощью мастера (поскольку сам я в COM пока-что чайник), подозреваю что должно быть нормально все там с IProvideClassInfo, а даже если и нет, то все равно последняя версия EventProxy.dll должна работать...
Не подскажешь в какую сторону копать ?
  
Наверх
 
IP записан
 
Elek
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 3
Зарегистрирован: 24. Декабря 2008
Re: ВК для асинхронной обработки событий COM-объектов.
Ответ #70 - 13. Февраля 2009 :: 12:46
Печать  
А можно штатными средствами отписаться от получения событий WMI?
  
Наверх
 
IP записан
 
blindvic
Senior Member
****
Отсутствует



Сообщений: 486
Местоположение: Moldova
Зарегистрирован: 23. Июня 2008
Пол: Мужской
Re: ВК для асинхронной обработки событий COM-объектов.
Ответ #71 - 30. Июня 2009 :: 14:45
Печать  
Кто-нибудь делал с помощью этой компоненты подписку на событие отсоединения сессии на терминальном сервере? Поделитесь кодом, а то задолбался искать. Не получилось даже тест запустить (событие если нагрузка процессора больше 40%, и несколько других примеров):
Код
Выбрать все
	    ОбработчикСобытий = СоздатьОбъект("Addin.EventProxy");
	    ОбработчикСобытий.ГлубинаБуфераСобытий = 200;
	    Обработчик = СоздатьОбъект ( "WbemScripting.SWbemSink" );
	    ОбработчикСобытий.Источник ( Обработчик, "WbemScripting.SWbemSink", "WMISink" );
	    objWMIServices = ОбработчикСобытий.ПолучитьОбъект ( "winmgmts:{impersonationLevel=impersonate}!\\.\root\default" );
		т = "SELECT * from __InstanceModificationEvent WITHIN 2 WHERE TargetInstance ISA 'Win32_Processor' and TargetInstance.LoadPercentage > 40";
	    objWMIServices.ExecNotificationQueryAsync ( Обработчик, т ); 


пишет
Код
Выбрать все
objWMIServices.ExecNotificationQueryAsync ( Обработчик,
{Глобальный модуль(938)}: SWbemServicesEx: Недопустимый класс  

  
Наверх
 
IP записан
 
pavlo
1c++ donor
1c++ power user
Отсутствует



Сообщений: 712
Местоположение: г. Новосибирск
Зарегистрирован: 10. Ноября 2006
Пол: Мужской
Re: ВК для асинхронной обработки событий COM-объектов.
Ответ #72 - 16. Декабря 2010 :: 12:00
Печать  
вот так всегда, находишь такое чудо, читаешь и понимаешь, что нашел, что то волшебное и безграничное, но что то такое что твой мозг пока не воспринимает как-то Улыбка

а задавался целью найти варианты реализации обмена сообщениями между пользователями 1с, причем передавая ссылки или ИД13 объектов, чтобы по ним тоже можно было сразу проваливаться в документ, который порекомендовали т .д. почти сделал на скуле почту, но чую это все изобретение велосипеда попахивает Улыбка
  

1с++     3.2.4.1
Formex  2.0.5.99b
Наверх
IP записан
 
dagipo
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 1
Зарегистрирован: 24. Декабря 2010
Re: ВК для асинхронной обработки событий COM-объектов.
Ответ #73 - 24. Декабря 2010 :: 14:01
Печать  
ВК супер. Пробовал ловить события от Skype4COM. Всё ловится замечательно. Только иногда 1С-ина падает. Пока непонятно почему. Использую платформу 8.1.

Вот набор функций для замены семерочного ЗначениеИзСтрокиВнутр

Функция ЗначениеИзСтрокиВнутр77(Стр)
     
     Список = РазобратьСтроку(Стр);
     Возврат ПреобразоватьДанныеСписка(Список);
КонецФункции

Функция ПреобразоватьДанныеСписка(Список)
     
     Если Список[0].Значение = "VL" Тогда
           
           Результат = Новый СписокЗначений;
           Для Каждого ЭлементСписка Из Список[1].Значение Цикл
                 
                 Данные = ПреобразоватьДанныеСписка(ЭлементСписка.Значение[0].Значение);
                 Результат.Добавить(Данные, ЭлементСписка.Значение[1].Значение);
           КонецЦикла;
     ИначеЕсли Список[0].Значение = "S" Тогда
           
           Результат = Список[6].Значение;
     ИначеЕсли Список[0].Значение = "N" Тогда
           
           Результат = Число(Список[6].Значение);
     КонецЕсли;
     Возврат Результат;
КонецФункции

Функция РазобратьСтроку(Знач Стр)
     
     Стр = Сред(Стр, 2, СтрДлина(Стр) - 2);
     Список = Новый СписокЗначений;
     
     Пока СтрДлина(Стр) > 0 Цикл
           Поз = НайтиРазделитель(Стр);
           Символ = Сред(Стр, Поз, 1);
           
           Если Символ = "," Тогда
                 Список.Добавить(Сред(Стр, 2, Поз - 3));
                 Стр = Сред(Стр, Поз + 1);
           ИначеЕсли Символ = "{" Тогда
                 // Ищем равное количество открывающих и закрывающих скобок
                 Открывающих = 1;
                 Закрывающих = 0;
                 Поз2 = Поз + 1;
                 Пока Открывающих <> Закрывающих Цикл
                       
                       Символ = Сред(Стр, Поз2, 1);
                       Если Символ = "{" Тогда
                             Открывающих = Открывающих + 1;
                       ИначеЕсли Символ = "}" Тогда
                             Закрывающих = Закрывающих + 1;
                       КонецЕсли;
                       Поз2 = Поз2 + 1;
                 КонецЦикла;
                 Список.Добавить(РазобратьСтроку(Сред(Стр, Поз, Поз2 - Поз)));
                 Стр = Сред(Стр, Поз2);
                 Если Лев(Стр, 1) = "," Тогда
                       Стр = Сред(Стр, 2);
                 КонецЕсли;
           Иначе
                 Список.Добавить(Сред(Стр, 2, СтрДлина(Стр) - 2));
                 Стр = "";
           КонецЕсли;
     КонецЦикла;
     Возврат Список;
КонецФункции

Функция НайтиРазделитель(Стр)
     
     Для Поз = 1 По СтрДлина(Стр) Цикл
           
           Символ = Сред(Стр, Поз, 1);
           Если Символ = "," ИЛИ Символ = "{" Тогда
                 Возврат Поз;
           КонецЕсли;
     КонецЦикла;
     Возврат 0;
КонецФункции



Еще одна проблема - при попытке использования XMLHTTP восьмерка слетает совсем. Семерка выдает сообщение

Код для 8-ки

Соединение = Новый COMОбъект("Microsoft.XMLHTTP");
ПодключитьВнешнююКомпоненту("Addin.EventProxy");
ОбработчикСобытий = Новый ("Addin.EventProxy");
ОбработчикСобытий.ГлубинаБуфераСобытий = 200;
ОбработчикСобытий.Источник(Соединение,"Microsoft.XMLHTTP","XMLHTTP");

Сори. Не знаю как выделить код.
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1 ... 3 4 [5] 
ОтправитьПечать