Создать объект приватного класса

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

Создать объект приватного класса

Сообщение Alexanbar » 12.11.2008 (Ср) 23:27

Проект (Standard.exe)содержит приватные классы Class1,Class2....

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

Для классов из ActiveX.Dll достаточно вызвать ф-ю CreateObject.


Можно, конечно, пойти ломовым путем, перебрав все имена классов проекта, и сравнить с образцом:
Код: Выделить всё
Select Case strClassName
   case "Class1"

      Set Obj=New Class1
.......


Или, скажем, создать ActivX.Dll, и превратить приватные классы в глобальные. Другие варианты есть?

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Re: Создать объект приватного класса

Сообщение Antonariy » 13.11.2008 (Чт) 10:30

Тоже задавался этим вопросом. Насколько понял из объяснений, теоретически это возможно, но настолько сложно, что лучше не надо. Сделал классы публичными (у меня сразу была dll) и забыл об этой проблеме.
Лучший способ понять что-то самому — объяснить это другому.

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Re: Создать объект приватного класса

Сообщение Sebas » 13.11.2008 (Чт) 10:48

Вот не пробовал, а Type Lib к ехе прикурутить никак?
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: Создать объект приватного класса

Сообщение Денис » 13.11.2008 (Чт) 10:56

Alexanbar писал(а):Можно, конечно, пойти ломовым путем, перебрав все имена классов проекта, и сравнить с образцом

Насколько я понимаю, это функция-перечислитель (enumerator). Вполне годный метод, когда надо получить класс по его текстовому описанию. Единственное неудобство: в такой функции надо следить за списком классов и при добавлении нового, добавлять в select case
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Re: Создать объект приватного класса

Сообщение Antonariy » 13.11.2008 (Чт) 11:08

Sebas писал(а):Вот не пробовал, а Type Lib к ехе прикурутить никак?

Нет. В tlb описываютсяя интерфейсы, их имена ничем не помогут.
Лучший способ понять что-то самому — объяснить это другому.

Vi
Постоялец
Постоялец
 
Сообщения: 739
Зарегистрирован: 25.01.2002 (Пт) 11:03
Откуда: Россия, Ижевск

Re: Создать объект приватного класса

Сообщение Vi » 13.11.2008 (Чт) 14:15

Можно уйти от "ломового пути", но совсем автоматизировать не удастся:
Код: Выделить всё
Public class1 As New class1
Public class2 As New class2
Public class3 As New class3
' ...

Private Sub Command1_Click()
  Dim o As Object
  On Error Resume Next
  Label1.Caption = ""
  Set o = CallByName(Me, Text1.Text, VbGet)
  Label1.Caption = TypeName(o)
End Sub
Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! (с) КВН

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Re: Создать объект приватного класса

Сообщение Sebas » 13.11.2008 (Чт) 16:19

Antonariy писал(а):
Sebas писал(а):Вот не пробовал, а Type Lib к ехе прикурутить никак?

Нет. В tlb описываютсяя интерфейсы, их имена ничем не помогут.


я про библиотеку Type Library ... (под рукой нет полного названия), которая позволяет работать а-ля рефлекшн в .NET
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Создать объект приватного класса

Сообщение alibek » 13.11.2008 (Чт) 16:21

Sebas писал(а):я про библиотеку Type Library ... (под рукой нет полного названия), которая позволяет работать а-ля рефлекшн в .NET

TLI, Type Library Information.
Только не уверен, что она будет видеть приватные типы.

Vi дал оптимальный совет (как всегда :) ). Только в качестве вспомогательного класса лучше использовать не форму, а именно класс.
Lasciate ogni speranza, voi ch'entrate.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Re: Создать объект приватного класса

Сообщение tyomitch » 13.11.2008 (Чт) 17:19

alibek писал(а):
Sebas писал(а):я про библиотеку Type Library ... (под рукой нет полного названия), которая позволяет работать а-ля рефлекшн в .NET

TLI, Type Library Information.
Только не уверен, что она будет видеть приватные типы.

Не будет.
Изображение


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

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 45

    TopList