Создание объектов по имени класса/формы

Здесь можно найти готовые «кирпичики» — части кода, пригодные для построения более крупных проектов, а также решения различных типовых и не очень задач на VB.

Модератор: Brickgroup

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

Создание объектов по имени класса/формы

Сообщение Хакер » 21.05.2011 (Сб) 9:37

Делая пример для новичков, я написал несколько строчек, которые напомнили мне об одной теме, где автор (Antonariy) искал способ создания экземпляров классов по имени этих классов. Ещё тогда я предложил верное направление, но на тот момент я недостаточно знал недокументированные подробности функционирования VB, а теперь же знаю их на порядок лучше, так что решил сделать кирпич.

Как известно, в VB можно создавать экземпляры форм и классов, но при этом оператор New принимает только явно указанное имя класса. Если имя класса (или формы) у вас содержится в строковой переменной — вы пролетели. Функция CreateObject делает что-то похожее: но она создаёт объект не по имени класса, а по ProgId-у, и главное — класс должен быть из стороннего зарегистрированного ActiveX-DLL-проекта и должен быть публичным. Приватные классы (а формы — тем более) пролетают.

Вернее, пролетали. Теперь можно спокойно создавать экземпляры форм и классов, имея строчку, содержащую имя нужного класса или формы. Никаких ограничений, полноценная отладка, работает и под IDE и в скомпилированном виде, должно работать с VB5.

В публикуемой мною сейчас (1.0.0) версии есть возможность создавать экземпляры внутрипроектных классов и форм, но нет возможности создавать экземпляры внутрипроектных User-Control-ов, хотя такая возможность планируется в версии 1.1.0. Как побочный эффект, будет требоваться подключение не только моего модуля, но ещё и моей специальной TLB-шки, которая будет сделана. Собственно, заранее напомню, что в TLB нет ничего страшного, и подключённые TLB даже не надо распространять вместе со скомпилированным проектом.

На самом деле, возможность создать экземпляр контрола есть и в этой версии, но работает она только в скомпилированном виде и только после снятия ключика DENY_USERCONTROLS, а возвращаемые ссылка — внутренний, не обёрнутый объект (читайте о разнице). Я уверен, что почти никто из пользователей кирпича не сумеет сам сделать правильное согласование такого объекта и контейнера. Так что ждём сл. версии.

Последняя версия:
brickmod.zip
Модуль отдельно. (Версия 1.0.0)
(3.58 Кб) Скачиваний: 604
example.zip
Пример «с картинками» отдельно. (Совместим с 1.0.0)
(1.73 МиБ) Скачиваний: 608


Структура каталогов в архивах одинаковая. Пример ожидает, что вы положите модуль в папку «brickmod».
Для использования кирпича кроме подключения модуля ничего больше не требуется.
Переименовывать модуль (а не его файл) крайне не рекомендуется.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

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

Re: Создание объектов по имени класса/формы

Сообщение Хакер » 21.05.2011 (Сб) 9:44

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


Вернуться в Кирпичный завод

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

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

    TopList