События из COM DLL на VB не обрабатываются в C#

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

События из COM DLL на VB не обрабатываются в C#

Сообщение jangle » 15.05.2017 (Пн) 12:56

Почему-то не ловятся эвенты. Кто виноват и что делать?

Вот та же ситуация: https://www.pcreview.co.uk/threads/hand ... p.1371653/

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: События из COM DLL на VB не обрабатываются в C#

Сообщение Хакер » 15.05.2017 (Пн) 16:31

Ну хоть бы пример выложил, чтобы экспериментировать с минимальными затратами времени на подготовку эксперимента.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: События из COM DLL на VB не обрабатываются в C#

Сообщение jangle » 23.05.2017 (Вт) 9:57

Как я понял, проблема взаимодействия C# и VB COM DLL глубже. C# это MTA приложение, а VB - STA.
Поэтому работа из многопоточного кода с STA библиотекой имеет множество подводных камней.

Но вопрос остается, можно ли организовать взаимодействие между C# MTA сервером (консольное, многопоточное, асинхронное приложение)
и VB COM библиотекой. Без разницы (DLL иди EXE сервер).

Размышления на эту тему можно найти тут, тут и здесь

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: События из COM DLL на VB не обрабатываются в C#

Сообщение Mikle » 23.05.2017 (Вт) 14:25

Я когда-то пробовал обратное - скомпилировал библиотеку на vb.net и задействовал из vb6. Получилось.

Teranas
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 224
Зарегистрирован: 13.12.2008 (Сб) 4:26
Откуда: Новосибирск

Re: События из COM DLL на VB не обрабатываются в C#

Сообщение Teranas » 23.05.2017 (Вт) 19:30

Или Вы чё-то мутите или я курнул не то, написать DLL-ку на VB и подключить с к проекту на C#... :roll:
С уважением, Андрей.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: События из COM DLL на VB не обрабатываются в C#

Сообщение Mikle » 23.05.2017 (Вт) 20:27

Teranas писал(а):написать DLL-ку на VB и подключить с к проекту на C#

Как бы, нет проблем. Но jangle утверждает, что не ловятся события. Надо будет проверить.

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: События из COM DLL на VB не обрабатываются в C#

Сообщение jangle » 23.05.2017 (Вт) 21:26

Ну причем тут события? Не работает C# MTA и VB DLL

screen.png
screen.png (26.61 Кб) Просмотров: 4553

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: События из COM DLL на VB не обрабатываются в C#

Сообщение jangle » 23.05.2017 (Вт) 21:56

И я не могу запихнуть сложную логику завязанную на события, в однопоточный контейнер, чтобы через эту дырочку удалять гланды...
В общем я решил отказаться от старого VB кода в пользу покупных .NET компонентов, в конечном счете это обойдется дешевле.

Все VB6 окончательно умер. Даже унаследованный код теперь нельзя использовать в многопоточных приложениях. Мир его праху.

Kroos
Обычный пользователь
Обычный пользователь
 
Сообщения: 55
Зарегистрирован: 21.02.2012 (Вт) 16:57

Re: События из COM DLL на VB не обрабатываются в C#

Сообщение Kroos » 24.05.2017 (Ср) 20:32

Я не вижу ваших изолированных демо-примеров проблемы на C# и vb библы, и вообще не сталкивался с такой ситуацией юзания старых чужих vb библ в C#, поэтому прошу прощения за тыкание пальцем в небо.
Переписать часть кода в целом/отдельных методов с использованием STA операторов/атрибутов пытались или решили не заморачиваться? Так ли необходим в данном конкретном случае вам MTA, т.е. как-то отрефакторить это взаимодействие с библой вы не пробовали и просто обращаетесь с ней "как есть"? Если да, и проблема актуальна, интересно посмотреть на проект и библу, вдруг получится что-то всеже сделать?

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: События из COM DLL на VB не обрабатываются в C#

Сообщение Хакер » 25.05.2017 (Чт) 3:58

Kroos писал(а):Я не вижу ваших изолированных демо-примеров проблемы на C# и vb библы

Думается, jangle принёс сюда это обсуждение не для того, чтобы найти решение, а чтобы лишний ещё раз выкрикнуть в воздух, что VB6 умер.

Хотя причём тут VB6, если правила для STA/MTA устанавливает COM, и такая же точно проблемы была бы, если бы библиотека была написана на на VB6, а, скажем, на С++.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: События из COM DLL на VB не обрабатываются в C#

Сообщение jangle » 25.05.2017 (Чт) 10:39

Kroos писал(а):Я не вижу ваших изолированных демо-примеров проблемы на C# и vb библы, и вообще не сталкивался с такой ситуацией юзания старых чужих vb библ в C#


Изолированных примеров у меня нет к сожалению. Есть большой проект на шарпе, это многопоточный сервер в виде Windows-службы


Код: Выделить всё
Переписать часть кода в целом/отдельных методов с использованием STA операторов/атрибутов пытались или решили не заморачиваться?


да, как то так, но при работе все крашится c Unexpected COM Error.
Взаимодействие МТА кода с COM объектом через однопоточный контейер. Но видимо нет синхронизации, потоки хаотически вызывают COM библиотеку и она от этого умирает

Код: Выделить всё
                     var th = new Thread(() =>
                            {
                                var cls = new MyActiveX.MyClass();
                                cls.Method(...);
                            });
                            th.SetApartmentState(ApartmentState.STA);
                            th.Start();


Если использовать тот же COM компонент из [STAThread] приложения то все работает отлично. Только нафиг оно мне надо?

Kroos
Обычный пользователь
Обычный пользователь
 
Сообщения: 55
Зарегистрирован: 21.02.2012 (Вт) 16:57

Re: События из COM DLL на VB не обрабатываются в C#

Сообщение Kroos » 25.05.2017 (Чт) 20:25

Обработчик эвентов где, в том же потоке, что и твое взаимодействие с библой? Видимо нет, поэтому и не будет ловить эвенты.

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: События из COM DLL на VB не обрабатываются в C#

Сообщение jangle » 26.05.2017 (Пт) 10:00

Ну пока давай без евентов, что работало хоть как то.

Kroos
Обычный пользователь
Обычный пользователь
 
Сообщения: 55
Зарегистрирован: 21.02.2012 (Вт) 16:57

Re: События из COM DLL на VB не обрабатываются в C#

Сообщение Kroos » 26.05.2017 (Пт) 12:15

Боюсь тут без демо-проекта воспроизводящего проблему и библы не обойтись.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот, Yandex-бот и гости: 29

    TopList  
cron