Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Как создатать событие в COM объекте (DLL) что бы потом можно его отловить с 1С?  (Прочитано 17895 раз)
0 Пользователей и 1 Гость смотрят эту тему.
AVDEY
Гость
« : 04-08-2007 22:27 » 

Как создатать событие в COM объекте (DLL) что бы потом можно его отловить с 1С?
HANDLE ev=CreateEvent(NULL,TRUE,FALSE,"MYEVENT");
SetEvent(ev);
ResetEvent(ev);
CloseHandle(ev);

Так не работает.
Записан
Anchorite
Гость
« Ответ #1 : 08-08-2007 14:38 » 

Может быть тебе стоит создать ивент внутри 1С, а потом в СОМ-объекте ОТКРЫТЬ его и "передернуть"?
Записан
AVDEY
Гость
« Ответ #2 : 12-08-2007 17:39 » 

А поподробней можно, как это сделать, или где найти, как решаются такие проблемы?
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 13-08-2007 17:38 » 

Наш админ 1С использует VB-вставки для работы с COM-объектами (не все пашет напрямую). Если удастся узнать подробности пока - напишу.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
AVDEY
Гость
« Ответ #4 : 13-08-2007 19:38 » 

Я то не откажусь от такого варианта.
Но в 1С есть:

Процедура ОбработкаВнешнегоСобытия(источник, Событие, Данные)
   // Вставить содержимое обработчика.
   Предупреждение("Событие");
КонецПроцедуры

Это же процедурой можно отловить события объекта?
Как написать в COM-объекте, чтобы это работало?
Пробивал с помощью точек входа(соприкосновения) (вроде так называется), но ничего в 1С не происходит.
Событие должно произойти при вызове метода, но ничего не происходит.
Исходник тестового проекта на VC++;

* TestComEvent.rar (39.21 Кб - загружено 863 раз.)
Записан
Anchorite
Гость
« Ответ #5 : 14-08-2007 05:53 » 

А в 1С можно использовать функции из существующей DLL? Тогда можно было бы напрямую использовать CreateEvent и WaitForSingleObject из Kernel32.dll
Записан
AVDEY
Гость
« Ответ #6 : 14-08-2007 07:30 » 

Использовать можно только методы. К 1С обычную DLL нельзя подключить, можно COM-объект, OLE-сервер так как доступ происходить через ProgID в реестре Windows.
И я уже пробивал создать глобальную переменную:
HANDLE hEvent=CreateEvent(NULL,TRUE,FALSE,"MYEVENT");
//когда нужно определить событитие:
SetEvent(hEvent);
Sleep(50);
ResetEvent(hEvent); //Не уверен в правильности написания


Но ничего в 1С ничего не происходит в процедуре обработки событий.
Записан
AVDEY
Гость
« Ответ #7 : 16-08-2007 07:17 » 

А может ктото знает как создать асинхронное событие в С++?
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #8 : 16-08-2007 07:31 » 

AVDEY, в с++ нет событий, события - в системе ведь. Для винды -
постом выше - функции АПИшные, поэтому точно так же Улыбаюсь
SetEvent - взводит событие,
ResetEvent - сбрасывает
Записан

AVDEY
Гость
« Ответ #9 : 16-08-2007 07:48 » 

Тоесть, да я имел ввиду асинхронные события винды, значит на сколько я понял. SetEvent ето и есть асинхронное событие.
Но как же ответ на одном из форумов цитирую:
"Event в windows api это объект ядра служащий для синхронизации данных между потоками процесса либо различных процессов и ни чего он ни куда не посылает."
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #10 : 16-08-2007 08:17 » 

AVDEY, всё верно. Событие - это просто объект ядра , ты создаёшь его при помощи , скажем, CreateEvent , получаешь его хендл. Кто угодно, кто знает хендл, может перевести объект "событие" в состояние "взведено" или "сброшено".
Чтобы "сгенерировать событие" в своей программе, нужно проверить состояние события

(например отдельный поток ждёт событие при помощи WaitForSingleObject , а потом вызывает обработчик)
Записан

AVDEY
Гость
« Ответ #11 : 16-08-2007 08:37 » 

Алексей1153++
Да это все верно, но это только в программе которая знает HANDLE hEvent; А в 1С такого нет.
А что за интерфейс или клас IAsyncEvent? Через него передаются события в 1С. Но в MSDN я такого не нашел.
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #12 : 16-08-2007 09:27 » 

AVDEY, и я не знаю... Но кроме мсдн есть ещё интернет )
(по ссылкам я не лазил, ищи)
http://www.yandex.ru/yandsearch?text=1c&holdreq=IAsyncEvent&holdreq_manually=true
Записан

AVDEY
Гость
« Ответ #13 : 16-08-2007 09:47 » 

Вобще то лазил, но почти все примеры на Delphi или на C#.
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #14 : 16-08-2007 09:52 » 

http://www.1cpp.ru/forum/YaBB.pl?num=1152684759;start=all
самый первый пост , там же аттач с примером - глянь, не то ?
----------------
http://oksla.narod.ru/vk.htm
может тут что встретится


или будем ждать тех, кто знает )
Записан

Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines