Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 1 |

 

  Вопрос: Вызов классов .NET из VB6 Добавлено: 07.04.04 10:09  

Автор вопроса:  alex

Подскажите ссылку на работоспособный пример вызова класов .NET из VB6

Что то типа..

Dim rt As mscoree.CorRuntimeHost

Dim unk As IUnknown

Dim ad As ComRuntimeLibrary.AppDomain

Dim s As ComRuntimeLibrary.Stack

Private Sub Form_Load()

Set rt = New mscoree.CorRuntimeHost

rt.Start

rt.GetDefaultDomain unk

Set ad = unk

Set s = ad.CreateInstance("mscorlib", _

"System.Collections.Stack").Unwrap

s.Push "Hello"

s.Push "Goodbye"

s.Push 42

MsgBox s.Pop()

MsgBox s.Pop()

MsgBox s.Pop()

End Sub

..........

.

.

.

.

Ответить

  Ответы Всего ответов: 6  

Номер ответа: 1
Автор ответа:
 Павел



Администратор

ICQ: 326066673 

Вопросов: 368
Ответов: 5968
 Web-сайт: www.vbnet.ru
 Профиль | | #1
Добавлено: 07.04.04 11:46
Нужно обработать .Net DLL утилитой regasm.exe (если мне не изменяе
память), и тогда у нему можно иметь доступ как к обычному ActiveX.

Ещё нужно в атрибутах сборки отметить, что она видима из COM (атрибут,
ИМХО, называется ComVisibleAttribute, устанавливается по умолчанию в
True при создании проекта).

Ответить

Номер ответа: 2
Автор ответа:
 alex



Вопросов: 84
Ответов: 453
 Профиль | | #2 Добавлено: 07.04.04 12:12

Дело в том, что мне нужно вызывать стандартные классы .NET Framework.

Я добавил в VB6 ссылку на mscoree.tlb и в браузере объектов увидел нужные мне

классы, однако как их использовать непонятно...

При попытке создания экземпляров классов выдается сообщение:

"Сan create ActiveX object..."

Ответить

Номер ответа: 3
Автор ответа:
 Павел



Администратор

ICQ: 326066673 

Вопросов: 368
Ответов: 5968
 Web-сайт: www.vbnet.ru
 Профиль | | #3
Добавлено: 07.04.04 15:55
CreateObject?

Ответить

Номер ответа: 4
Автор ответа:
 alex



Вопросов: 84
Ответов: 453
 Профиль | | #4 Добавлено: 07.04.04 17:17

Вроде да..

Хотелось бы увидеть хотя бы один работоспособный исходник на VB6 в котором

используются классы .NET Framework

Ответить

Номер ответа: 5
Автор ответа:
 alex



Вопросов: 84
Ответов: 453
 Профиль | | #5 Добавлено: 08.04.04 14:19

Спасибо за помощь, удалось найти пример использования .NET классов в VB6,

в книге Д.Эпплмана "Переход на VB.NET стратегии, концепции, код". Эти исходники

лежат на сайте www.piter.com/download

Весь фокус в том, что при компиляции класса, в свойствах проекта надо установить

флажок Register for COM Interop, правда при этом компонет позволяет использовать

только позднее связывание. Что бы использовать раннее связывание, нужно вручную

описать интерфейс компонента, вот пример такого класса:

Imports System.Runtime.InteropServices

Public Interface _CallFromCOM2

Function TimesTwo(ByVal i As Integer) As Integer

Function BadWay(ByVal i As Integer) As Object

End Interface

Public Class CallFromCOM2

Implements _CallFromCOM2

Public Function TimesTwo(ByVal i As Integer) As Integer Implements _CallFromCOM2.TimesTwo

Return i * 2

End Function

Public Function BadWay(ByVal i As Integer) As Object Implements _CallFromCOM2.BadWay

Return i * 2

End Function

Public Function TimesThree(ByVal i As Integer) As Integer

Return i * 3

End Function

Public Shared Sub OnRegistration(ByVal T As Type)

MsgBox("I'm being registered!!! :" & T.FullName)

End Sub

End Class

В результате после компиляции получим еще и .tlb на которую можно делать ссылку из VB6

Ответить

Номер ответа: 6
Автор ответа:
 Alex3



ICQ: 9481061 

Вопросов: 18
Ответов: 132
 Профиль | | #6 Добавлено: 08.04.04 18:11

Собственно, установка этой галки эквивалентно использованию утилиты RegAsm.exe.

Я это делал так.

RegAsm.exe clsFinder.dll /tlb /codebase

При этом создается tlb-файл и что-то пишется в реестр.

И это надо делать на каждой машине, куда установишь свою программу.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам