Имя: Пароль:
1C
1С v8
Не срабатывает внешнее событие на форме из внешней компоненты
0 rosbes
 
13.12.16
16:57
Создаю внешнюю компоненту Native. Свойства компоненты видно, методы и функции вызываются, параметры передаются а внешнее событие при  m_iConnect->ExternalEvent не отрабатывает.
1 H A D G E H O G s
 
13.12.16
16:58
c Native это не работает
2 Волшебник
 
модератор
13.12.16
16:58
Обратитесь к разработчику внешней компоненты. ;)
3 H A D G E H O G s
 
13.12.16
17:23
Для native можно юзать интерфейс
IConnectionPointContainer = interface ['{B196B284-BAB4-101A-B69C-00AA00341D07}']

А в 1С - ДобавитьОбработчик()

Я делал для Дельфи, как в этом вашем плюснутом и-фейсе - не знаю. Да и я потом забил на native и сделал все на православном COM
4 Fragster
 
гуру
13.12.16
17:28
(1) а как 1с сканер штрихкодов работает?
5 Кирпич
 
13.12.16
19:55
(1)  у меня всегда работало
6 Serginio1
 
14.12.16
00:00
По умолчанию очередь сообщений равна 1. Если сообщение не обработано, а в очередь ставится событие, то оно сглатывается 1С.
7 Serginio1
 
14.12.16
00:10
m_iConnect->SetEventBufferDepth(lDepth);
8 Serginio1
 
14.12.16
00:11
Ну и посмотри в отладчике, что возвращает
m_iConnect->ExternalEvent
9 Serginio1
 
14.12.16
00:25
Ну и не забыть на форме подписаться на событие
10 rosbes
 
14.12.16
11:04
SetEventBufferDepth(40000)
m_iConnect->ExternalEvent(...) возвращает true

На форме стоит
&НаКлиенте
Процедура ВнешнееСобытие(Источник, Событие, Данные)
...


Внешнее событие не срабатывает
11 Fragster
 
гуру
14.12.16
11:12
(10) а процедура выбрана в свойствах формы как обработчик события?
12 Кирпич
 
14.12.16
11:14
(11) вотьимана
13 rosbes
 
14.12.16
11:22
(11) Да
14 Кирпич
 
14.12.16
11:24
(13) врешь небось
15 Кирпич
 
14.12.16
11:25
(13) вот такое точно есть?
http://pastenow.ru/5c21f88ba6dc0b154cf384f3b0d27a41
16 Serginio1
 
14.12.16
11:32
(10) Это не подписка на событие. Это просто метод.
Подписаться на событие ты можешь через выбор в форме ВнешнееСобытие
Либо

ДобавитьОбработчик Форма.ВнешнееСобытие, Обработка.ВнешнееСобытие;
17 Кирпич
 
14.12.16
11:38
Так то, по умному, нужно код смотреть. Второй день ждать прихода телепата как то не по научному.
Может у тебя там объект ВК - локальная переменная, которая сдыхает прежде чем прилетит событие.
18 Serginio1
 
14.12.16
11:39
Вернее
ДобавитьОбработчик ЭтаФорма.ВнешнееСобытие, ВнешнееСобытие;
19 Serginio1
 
14.12.16
11:39
(17) Суть поставить в очередь 3 строки.
20 Кирпич
 
14.12.16
11:42
(0) Код будет? Или будем неделю гадать в каком месте ты начудил? :)
21 Serginio1
 
14.12.16
11:44
(0) Для достоверности Можешь взять любую ВК и проверить на своей форме
22 rosbes
 
14.12.16
11:45
(15) Абсолютно точно
23 Кирпич
 
14.12.16
11:49
(22) объект ВК глобальная переменная?
24 Кирпич
 
14.12.16
11:53
чота автор на американских горках чтоли катается. отвечает раз в 10 минут. вот короче пример как в 1с это делается.
тут типа ВК запускает по команде Старт() поток, который генерит события. По команде Стоп() перестает.

&НаКлиенте
Перем ОбъектВК;

&НаКлиенте
Процедура Старт(Команда)
    ИмяМакета = "ОбщийМакет.ТестВК";
    УстановитьВнешнююКомпоненту(ИмяМакета);
    Если НЕ ПодключитьВнешнююКомпоненту(ИмяМакета,"DemoLib",ТипВнешнейКомпоненты.Native) Тогда
        УстановитьВнешнююКомпоненту(ИмяМакета);
        ПодключитьВнешнююКомпоненту(ИмяМакета,"DemoLib",ТипВнешнейКомпоненты.Native)
    КонецЕсли;
    ОбъектВК = Новый("AddIn.DemoLib.Пример");    
    ОбъектВК.Старт();        
КонецПроцедуры

&НаКлиенте
Процедура Стоп(Команда)
    ОбъектВК.Стоп();
    ОбъектВК = Неопределено;
КонецПроцедуры

&НаКлиенте
Процедура ВнешнееСобытие(Источник, Событие, Данные)     
    Состояние(Данные);
КонецПроцедуры
25 rosbes
 
14.12.16
12:01
(24) Спасибо! Была не глобальная.

Я наверно где то что то упустил когда читал. Это вообще где то написано в руководстве?
26 Кирпич
 
14.12.16
12:05
(25) да нет. это вроде очевидно и само собой разумеется.
27 rosbes
 
14.12.16
12:08
(26) А в обработчике внешнего события есть гдето ссылка на глобальную переменную? С чего это должно быть очевидно?
28 Кирпич
 
14.12.16
12:11
(27) я не знаю как оно там внутри устроено. знаю, что чтобы от сканера были события, должен существовать сам сканер(его переменная)
29 rosbes
 
14.12.16
12:13
Всем спасибо!
30 Serginio1
 
14.12.16
12:38
Вообще то, при обнулении ссылки на ВК она дестроитсяю
Значит ты не обрабатываешь. Типа такого

long DestroyObject(IComponentBase** pIntf)
    {
        if (!*pIntf)
            return -1;
        
        BaseNetObjectToNative* temp = (BaseNetObjectToNative*)* pIntf;
        delete temp;
      //       return -1;
        *pIntf = 0;
        return 0;
    }
31 Serginio1
 
14.12.16
12:39
Да и вообще DLL должна была выгрузиться
32 Кирпич
 
14.12.16
12:50
(31) ага. если она не на .NET написана :)
33 Кирпич
 
14.12.16
12:55
(30) а это тут вообще не причем
34 Serginio1
 
14.12.16
13:16
(32) И на .Net выгружает. Просто у меня были проблемы с повторной инициализацией домена и прочего. Поэтому, для того что бы не выгружалась, я второй раз её загружаю.

(33) Причем. Должна вызвать исключение или упасть, а по уму еслизадесроена то и вызывать ничего не должна. А он утверждает в 10, что работает.
35 Кирпич
 
14.12.16
13:25
(34) "И на .Net выгружает." чота не видел такого. есть пример ВК на .NET которая выгружается?
36 Кирпич
 
14.12.16
13:27
(34) "Должна вызвать исключение или упасть". фиг знает чо он там понапрограммировал. молодой, горячий...
37 Serginio1
 
14.12.16
13:27
(32) Да и как бы Native ВК на .Net не бывает. Бывает нативная ВК использующая управляемые библиотеки.
Хотя в принципе можно и сварганить на .Net используя собственную VMT.

http://rsdn.org/forum/dotnet/6614203.1

(35) Бери мою ВК. Я специально делаю
Врап.ЗагрузитьDLL(ИмяФайла);
38 Serginio1
 
14.12.16
13:30
(35) Еще. http://catalog.mista.ru/public/300091/

Но еще раз это нативная ВК внутри использующая .Net
39 Cool_Profi
 
14.12.16
13:30
(31) 1с внешние компоненты не выгружает
40 Кирпич
 
14.12.16
13:30
(37) да нафиг мне этот весь геморрой. у меня и без .NET всё работает. был бы я школьник, который ничего кроме шарпа не знает, другое дело. а так нафиг.
41 Кирпич
 
14.12.16
13:32
(39) NativeAPI вроде выгружала
42 Serginio1
 
14.12.16
14:04
(37) А кто тебя заставляет? Ты просил ВК в 35, я тебе дал.
К сожалению, 1С ки и Шарпа не знают кстати, а ты школьники.
43 Кирпич
 
14.12.16
14:20
(42) "А кто тебя заставляет?" ну я просто думал, что там будет пара строчек и dll будет выгружаться. А там какие то танцы с бубнами.
44 Serginio1
 
14.12.16
14:31
(43) Вот странный ты. Пишешь, что не школьник, а в твоем понимании Native ВК на .Net это пара строчек.
45 HardBall
 
14.12.16
18:42
Народ, поделитесь пустым шаблоном Native ВК на .NET. Который бы  отрабатывал при ПодключитьВнешнююКомпоненту(ИмяВК);
        net = Новый(ИмяВК);
46 Serginio1
 
14.12.16
19:48
47 Serginio1
 
14.12.16
19:50
Программист всегда исправляет последнюю ошибку.