Пользовательский тип в свойствах класса.

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

Пользовательский тип в свойствах класса.

Сообщение GKosh » 25.10.2003 (Сб) 13:34

Не хочет, злодей, компилировать! :-(
Тип объявлен:
Public Type TypeName
в обыкновенном модуле и используется в классе того же проекта в качестве свойства (Private переменная as TypeName со всеми вытекающими в процедурах Get и Let).
При компиляции выдаёт ошибку:
" Only public defined types defined in public object modules can be used as parameters or return types for public procedures of ckass modules."

Ну что мне с ним делать! Подскажите пожалуйста.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 26.10.2003 (Вс) 6:36

Ага, ещё один наступивший на эти грабельки :twisted:
Придётся создавать ActiveX DLL, в этой библе создавать класс (неважно как назвать), в этом классе описать Public Type ... End Type, библу скомпилировать и к проекту через референсы подключить! Только тогда вся эта шняга будет считаться PUBLIC :evil:
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

GKosh
Начинающий
Начинающий
 
Сообщения: 3
Зарегистрирован: 08.02.2003 (Сб) 10:41

Сообщение GKosh » 29.10.2003 (Ср) 13:05

Ничего себе! :shock:
А простая DLL подойдёт?

skiperski
Идеолог
Идеолог
Аватара пользователя
 
Сообщения: 1386
Зарегистрирован: 25.06.2002 (Вт) 15:52

Сообщение skiperski » 29.10.2003 (Ср) 16:51

GKosh писал(а):...и используется в классе того же проекта...

GSerg писал(а):Придётся создавать ActiveX DLL...

Не надо ничего создавать.

для ActiveX EXE:
объявить тип как Public в классе проекта.

для Standart EXE:
объявить тип как Private в классе проекта, а все Public свойства/процедуры/функции переделать в Friend.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 30.10.2003 (Чт) 10:05

Так-так-так... Осень-осень интересно...

Создаём класс. Пишем в нём private type. Создаём friend functon as mytype. При попытке вызова из другого класса огребаем, ибо там этот тип не опререлён. В вызывающем классе описываем этот тип заново, и тоже private. Теперь friend из первого класса вызывается.
Прикол в том, что в вызывающем классе можно описать тип по-другому, но с тем же именем, со свеми вытекающими багами.
Но способ всё равно инересный :)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

skiperski
Идеолог
Идеолог
Аватара пользователя
 
Сообщения: 1386
Зарегистрирован: 25.06.2002 (Вт) 15:52

Сообщение skiperski » 30.10.2003 (Чт) 12:55

skiperski писал(а):для Standart EXE:
объявить тип как Private в классе проекта, а все Public свойства/процедуры/функции переделать в Friend.

Поправка:
объявить тип как Public в простом модуле, а все Public свойства/процедуры/функции класса переделать в Friend.


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

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

Сейчас этот форум просматривают: AhrefsBot и гости: 86

    TopList