Модераторы: Akina
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> .Net СОМ-компонент и VB6, проблема с подключением компонента  
V
    Опции темы
explorer
  Дата 31.8.2008, 13:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 104
Регистрация: 26.2.2008

Репутация: нет
Всего: 2



Здравствуйте, уважаемые знатоки. Помогите, пожалуйста, разобраться со сложившейся ситуацией. А ситуация следующая: есть компонент, написанный на C#. Этот компонент сделан как COM-компонент. Помимо основного СОМ-интерфейса он также содержит интерфейс событий. Требуется подключить это дело в проект VB. (Проект - форма, на которой должен быть размещен компонент, и пара кнопок для вызова методов компонента. Используется VB 6 из состава MS VS 6.0) 
Я попробовал два варианта.. 

Код

Dim WithEvents Ctrl As Namespace.ControlName

private Sub button1_Click()
Set Ctrl = new Namespace.ControlName
Ctrl.Method1(arg1, arg2)

End Sub

private Sub Ctrl_OnEvent1(arg as String)
MsgBox(arg)
End Sub


private Sub Form1_OnDeactivate()
Set Ctrl = Nothing
End Sub

В этом случае СОМ-компонент создавался, вызывались его методы и обработчик события Event1, НО, контрол был невидим. Я пробовал добавлять ему в СОМ-интерфейс метод Visible (с соответствующем изменением кода в самом компоненте. Компонент унаследован от Windows.Forms.UserControl), но это так же не дало положительного результата.

Тогда я опробовал такой вариант:
Код

Dim Ctrl As Object

private Sub button1_Click()
Set Ctrl = Form1.Controls.Add("Namespace.ControlName", "TestControl")
Ctrl.Method1(arg1, arg2)
End Sub

private Sub Ctrl_OnEvent1(arg as String)
MsgBox(arg)
End Sub

private Sub Form1_OnDeactivate()
Set Ctrl = Nothing
End Sub


В этом же случае СОМ-компонент отображался на форме, но событие от него не возвращалось, а на строчке с вызовом метода возникала ошибка "У объекта нет такого свойства или метода" =(. 
Попытки для второго случая объявить компонент с поддержкой событий и типом Namespace.ControlName приводили к ошибке "Несоответствие типов" в строке инстанциаци компонента. 
Подскажите, пожалуйста, как же все-таки нужно подключать СОМ-компонент, чтобы он и отобразился, и были видны его методы и события??

--------------------
 
PM MAIL WWW ICQ   Вверх
Akina
Дата 31.8.2008, 21:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 34
Всего: 454



В первом случае контрол не отображался, потому что создавался он неизвестно где, а никак не на форме.
Во втором же случае тебе нагадило именно объявление его как некий абстрактный объект плюс неявное создание.

Выдержка из справки - в аттаче. Обрати внимание - контрол сначала создается, а потом добавляется в коллекцию контролов формы.




Присоединённый файл ( Кол-во скачиваний: 4 )
Присоединённый файл  1.rar 4,51 Kb


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
explorer
Дата 1.9.2008, 11:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 104
Регистрация: 26.2.2008

Репутация: нет
Всего: 2



Akina, спасибо большое!!!! Мануал помог. Жаль, что у меня VB не укомплекован справкой =( 
Если кому интересно, как же все-таки это делается, то вот вам код:
Код

Dim WithEvents ctrl As VBControlExtender ' объявляем наш контрол
Dim WithEvents events As ControlName.ControlName ' объявлем еще одну переменную типа контрол для обработки событий.. 
'там все хитро, т.к. VBControlExtender является "оболочкой" над нашим контролом и 
'скрывает его в своем свойстве "object", что затрудняет доступ к событиям контрола

Private Sub Button_Click()
Licenses.Add "Namespace.ControlName", "license_number_string_here" 'регистрируем контрол. 
'Номер лицензии сами пишем. Я использовал название проекта и дату
Set ctrl = Form1.Controls.Add("Namespace.ControlName", "Control1") 'добавляем наш контрол в коллекцию контролов формы
ctrl.Visible = True ' отображаем его (этот метод не нужно делать самому, он содержится в "оболочке" VB)
'далее организуем вызов методов и обращение к свойствам нашего контрола:
ctrl.object.boolExampleProperty = True
ctrl.object.ExampleMethod "Control is loaded"
Set events = ctrl.object ' в events у нас будет лежать ссылка на сам контрол, 
'чтобы можно было обработать его события. 
'В общем-то, так можно было бы поступить вначале процедуры.
End Sub

Private Sub Form1_Unload()
Form1.Controls.Remove "Control1" 'удаляем контрол при закрытии формы
End Sub

Private Sub events_OnEvent1(ByVal arg1 As String)
MsgBox (arg1)
End Sub


Это сообщение отредактировал(а) explorer - 1.9.2008, 11:48
--------------------
 
PM MAIL WWW ICQ   Вверх
Akina
Дата 1.9.2008, 13:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 34
Всего: 454



Цитата(explorer @  1.9.2008,  12:43 Найти цитируемый пост)
Жаль, что у меня VB не укомплекован справкой =( 

Надеюсь, комп у тебя укомплектован Инетом? msdn.microsoft.com


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "VB6"
Akina

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по VB обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • Используйте теги [code=vb][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | VB6 | Следующая тема »


 




[ Время генерации скрипта: 0.0485 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.